Sql-Server
是否可以根據 SQL Server 版本選擇 RAISERROR 或 THROW?
這是我現在的程式碼:
BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH
效果很好,除非它在裝有 SQL 2008 的機器上執行。我想讓 CATCH 塊對 SQL 版本進行檢查,如果它等於或高於 2012,則執行 THROW,如果是 2008,則執行 RAISERROR。我一直遇到語法錯誤,我想知道它是否可能。即使像這樣簡單的事情也不適合我。
BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH
任何建議表示讚賞。
不,這是不可能的。
這在早期版本中是無效的語法,會導致編譯錯誤。
不可能將 隱藏
THROW
在EXEC
catch 塊內,因為無參數 throw 必須直接包含在 catch 內。您需要根據您要部署到的 SQL Server 版本來部署您想要的程式碼版本(不幸的是,我知道的 SSDT 工具中對此也沒有很好的支持 - 沒有等效於通過選擇性地包含程式碼行條件編譯)