Sql-Server

是否可以根據 SQL Server 版本選擇 RAISERROR 或 THROW?

  • December 12, 2016

這是我現在的程式碼:

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

任何建議表示讚賞。

不,這是不可能的。

這在早期版本中是無效的語法,會導致編譯錯誤。

不可能將 隱藏THROWEXECcatch 塊內,因為無參數 throw 必須直接包含在 catch 內。

您需要根據您要部署到的 SQL Server 版本來部署您想要的程式碼版本(不幸的是,我知道的 SSDT 工具中對此也沒有很好的支持 - 沒有等效於通過選擇性地包含程式碼行條件編譯)

引用自:https://dba.stackexchange.com/questions/157790