这是一个查询 -
select maclin,mamatn,caname,madesc,madtop,malstd,mastat,ISNULL(sum(tlchgv),0.00) as WIP,
(select isnull(sum(blcost),0.00) from blfile where blclin = maclin and blmatn = mamatn)
as billed,
isnull(rfhghq,0.00),isnull(rffixq,0.00),ISNULL(rfdate,'17770101'),cmidst
from mafile,cafile,tlfile,rffile,cmfile where maclin=caclin and maclin*=tlclin
and mamatn*=tlmatn and
maclin*=rfclin and mamatn*=rfmatn and maclin=cmclin and tlstat='' and
maeact = 32 and maspca = 0
group by maclin,mamatn,caname,madesc,madtop,malstd,mastat,rfhghq,rffixq,rfdate,cmidst
order by caname,maclin,mamatn
如果我在SQL Server Management Studio上运行,查询将在1秒内运行并返回5190行。
当我通过ODBC从Windows XP PC桌面上的Visual Foxpro程序运行完全相同的查询时,查询返回没有错误但没有行!
如果我在查询中添加select top 5000,它可以工作但需要5分钟。如果我加注选择前5200,它再也不会重新调整。
在SQL 2000中使用相同的Visual Foxpro程序,它可以正常工作。
最奇怪的。有什么想法可能是什么问题?
答案 0 :(得分:0)
让我们看看现代语法是否仍然可以获得你所追求的结果而不必永远地使用。
SELECT ma.maclin, ma.mamatn, ca.caname, ma.madesc, ma.madtop, ma.malstd,
WIP = COALESCE(SUM(tl.tlchgv), 0.00),
billed = COALESCE(SUM(bl.blcost), 0.00),
rfhghq = COALESCE(rf.rfhghq, 0.00),
rffixq = COALESCE(rf.rffizq, 0.00),
rfdate = COALESCE(rf.rfdate, '17770101'),
cm.cmidst
FROM dbo.mafile AS ma
INNER JOIN dbo.cafile AS ca
ON ma.maclin = ca.caclin
INNER JOIN dbo.cmfile AS cm
ON ma.maclin = cm.cmclin
LEFT OUTER JOIN dbo.tlfile AS tl
ON ma.maclin = tl.tlclin
AND ma.mamatn = tl.tlmatn
AND tl.tlstat = ''
LEFT OUTER JOIN dbo.rffile AS rf
ON ma.mamatn = rf.rfmatn
LEFT OUTER JOIN dbo.blfile AS bl
ON bl.blclin = ma.maclin
AND bl.blmatn = ma.mamatn
WHERE
ma.maeact = 32 AND ma.maspca = 0
GROUP BY
ma.maclin, ma.mamatn, ca.caname, ma.madesc, ma.madtop, ma.malstd,
COALESCE(rf.rfhghq, 0.00),
COALESCE(rf.rffizq, 0.00),
COALESCE(rf.rfdate, '17770101'),
cm.cmidst
ORDER BY ca.caname, ma.maclin, ma.mamatn;