2012-02-20 41 views
1

下面是一個查詢 -查詢工作Management Studio中而不是從客戶端

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程序運行完全相同的查詢時,查詢將返回沒有錯誤但沒有行!

如果我添加選擇頂部5000到查詢,它的工作,但需要5分鐘。如果我選擇頂級5200,它會再次沒有重新調整。

使用與SQL 2000相同的Visual Foxpro程序,它工作正常。

最離奇。有沒有人有任何想法可能是什麼問題?

+1

爲什麼使用舊式連接和不推薦的'* ='語法?你有沒有想過看到(例如通過Profiler)如果FoxPro在提交給SQL Server之前以某種方式改變了查詢?是否有可能你的表不在'dbo'模式中(或者FoxPro用戶具有不同的默認模式),並且你實際上在每種情況下查看不同的表?或者,也許你連接到不同版本的數據庫或SQL Server的不同實例? – 2012-02-20 15:52:57

+0

謝謝Aaron,他們都在看同一個數據庫,所有的表都在那裏。我確實嘗試轉換爲左外連接,但放棄了,因爲我發現查找查詢的正確語法太複雜了。我忘了提及SQL版本是2008 R2 64位,並且我已將兼容性設置爲80 - SQL 2000.關於dave – Dave 2012-02-20 16:18:19

+0

這聽起來像是您正在發生某種超時並且FoxPro正在放棄。 FoxPro與SQL Server在同一臺計算機上嗎?他們是否使用相同的登錄連接?爲什麼你需要80兼容性? – 2012-02-20 17:18:13

回答

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; 
+0

嗨亞倫,謝謝你的時間。我終於找到了造成問題的原因。這是Visual Foxpro 6.5,000的限制。線索是5000行,但5,001失敗。 5,000次13列= 65,000。不止這些都會導致錯誤。還非常感謝轉換後的查詢。但是BLFILE的總和不見了。謝謝你的幫助。 – Dave 2012-02-21 10:58:17

+0

65,000的限制適用於數組(在VFP 9之前),但不適用於遊標。所以我認爲這裏還有其他事情在發生。 – 2012-02-21 21:29:34

相關問題