查询适用于Management Studio,但不适用于客户端

时间:2012-02-20 15:43:38

标签: sql-server-2008-r2 visual-foxpro

这是一个查询 -

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程序,它可以正常工作。

最奇怪的。有什么想法可能是什么问题?

1 个答案:

答案 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;