2011-04-25 20 views
3

我沒有尋找我的存儲過程的實際代碼(但無論如何)的幫助,但客戶端向我發送了他的SQL Server 2000數據庫的副本,指出某個特定的proc返回了不正確的結果;我將數據庫恢復到了我的服務器(SQL Server 2008R2)並運行了proc,併產生了正確的結果。請記住,沒有可能導致差異的前端 - 在這兩種情況下,我只需執行proc thru企業經理和管理工作室。您是否曾經使SQL Server 2008返回與SQL Server 2000不同的結果集?

我想知道是否有任何已知的差異,可能有助於/導致此問題?這個特定的proc使用了大量的條件邏輯,默認參數,甚至還有一個遊標來執行一些循環邏輯,但是對於可能的區域的任何建議都是有幫助的。

編輯:爲了澄清,返回的行和列的數量是相同的,但是對於特定的列(對於某些行取決於數據字段的值),該數字恰好是它應該是的兩倍。 2008年給出了「正確的」答案。 '2000'給出了錯誤的答案,即雙重金額。

+3

你可以嘗試2008數據庫設置你的SQL Server兼容性80,看看你會得到相同的結果與SQL Server 2000中一樣。可能有一些設置的行爲有所不同。看看這裏有什麼不同的兼容性級別。 http://msdn.microsoft.com/en-us/library/bb510680.aspx – 2011-04-25 20:56:03

+0

兼容性已被設置爲80,但好建議 – 2011-04-25 21:01:47

+0

您可以將sql減少爲生成該列的代碼並重現問題 - - 我想看看代碼。 – Hogan 2011-04-26 01:27:44

回答

3

有可能導致此問題,包括(但不限於)整理和系統設置這麼多的事情。如果我們看到SP,我們可能會發現罪魁禍首。除了改變部署有差異之間的版本看

http://msdn.microsoft.com/en-us/library/ms143179(v=sql.100).aspx

http://msdn.microsoft.com/en-us/library/ms143179.aspx

+1

服務器整理中的+1;我會先檢查一下。恢復的數據庫將保留它的設置,但Tempdb將使用服務器的設置。肯定會導致一些不同的行爲。 – SqlACID 2011-04-26 11:11:21

2

意見與ORDER BY不會在SQL Server 2008中進行排序,在這裏看到:Create a sorted view in SQL Server 2005 and SQL Server 2008

當你說:不正確的結果,你是什麼意思? SQL Server安裝的語言,也可以因素,如果你在日期作爲字符串傳遞和不使用ISO /安全格式

也可能是從連接ANSI設置在您的客戶端DB進來

也許他們有ANSI_NULLS OFF,而不是在

+0

我已經編輯我的上面的原始問題,但對於某些行,特定的列恰好是它應該是的兩倍。 – 2011-04-25 21:05:42

相關問題