2

嗨,我使用MSSQLSERVER 2000,2005,2008和2008R2如何在存儲過程運行的兼容性

我創建於2000年SP,想在更高版本或反之亦然說假設我有生成的SP運行在2008年(我的意思是在更高版本上創建SP),並希望在2000或2005年等較低版本上運行它,我需要做什麼以便SP或SP中的相同代碼將用於不同的不同版本? 任何人都可以請幫我這個....

回答

2

我假設「創建SP在2008年,並希望運行它在較低的版本」你的意思是應對2008年的程序代碼,並在2000年重新創建它

如果是這樣,它將取決於您在過程中使用的T-SQL代碼。如果你在2008年擁有2000年的所有功能,它可以在兩個版本上運行。但是,如果你在2008年有一個運行CTE的程序,例如它不能在2000上運行,因爲該版本不支持CTE。

this鏈接就會下載一個文件,顯示差異

+0

約定在2000年沒有CTE概念,所以我們應該如何使代碼兼容或SP兼容說假設我使用200,2005年的日期,但如果我們使用datetime不在2000年,這給了我們錯誤。 你能幫我嗎我們該怎麼做。 – 2012-04-26 13:37:57

+1

嗨,CTE只是一個例子,你需要擔心幾件事情。正如你所指出的那樣,日期時間也是不同的。我認爲唯一可以肯定的方法是嘗試創建2000年的程序 – Diego 2012-04-28 12:23:39

+0

好吧,現在我已經安裝了2000,2005&2008我試過多個插入單行這是2008年的功能不可能在2005年和2000年唯一的解決方案如果我們使用select和union all來插入多個值是可能的,但是如果我在2008年我們在單行中使用相同的多個值的語法,我們可以做複雜度的後退,我的意思是多值代碼將運行在2005年和2000年沒有做任何改變..? – 2012-04-28 13:37:25

1

作爲開始,不要使用熱膨脹係數或表變量。

SQL 2005+是多了幾分書卷氣/符合有關分號,所以,如果你寫在那裏,它應該在SQL 2000

跑了幾個列表,也看到What are the new t-sql features sql server 2005?

從經驗的警告:微軟承認在SQL 2005及更高版本中改變查詢語義來提高性能。請參閱微軟的6/17/08 11:34 AM響應: http://connect.microsoft.com/SQLServer/feedback/details/350485/bug-with-newid-and-table-expressions

例如,我在SQL 2000中編寫了一個子查詢以返回有效日期列表。

Select dates.Date, * 
From (
    Select Cast(y + '-' + m + '-' + d1 + d2 As smalldatetime) [date] 
    From (Select '2007' y Union Select '2008') y, 
    (Select '01' m Union Select '02' Union Select '03' Union Select '04' Union Select '05'Union Select '06' Union Select '07' Union Select '08' Union Select '09' Union Select '10' Union Select '11' Union Select '12') m, 
    (Select '0' d1 Union Select '1' Union Select '2' Union Select '3') d1, 
    (Select '0' d2 Union Select '1' Union Select '2' Union Select '3' Union Select '4' Union Select '5' Union Select '6' Union Select '7' Union Select '8' Union Select '9') d2 
    Where IsDate(y + '-' + m + '-' + d1 + d2) = 1 
) dates 

我用它作爲子查詢連接到一個有稀疏日期的表,所以我可以建立一個日曆。雖然不理想,但我不想在這種情況下創建「日期」表,並且它很有效。

當我們切換到SQL Server 2005時,它決定在Cast(as smalldatetime)之後優化「Where IsDate」。這意味着它試圖投射一些不是日期的東西,並返回一個錯誤。我相信我試圖進一步嵌套子查詢,以便Cast在IsDate的查詢之外,並且仍然失敗。解決方案是用子查詢的結果構建臨時表或表變量,並將其加入到我們的稀疏表中。