tho*_*ett 11 sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 sql-server-2014
这是我现在的代码:
BEGIN TRY
INSERT INTO TABLE (F1,F2,F3)
VALUES ('1','2','3')
END TRY
BEGIN CATCH
;THROW
END CATCH
Run Code Online (Sandbox Code Playgroud)
效果很好,除非它在装有 SQL 2008 的机器上运行。我想让 CATCH 块检查 SQL 版本并运行 THROW(如果它等于或高于 2012 年),如果是 2008 年则运行 RAISERROR。我一直遇到语法错误,我想知道是否有可能。即使像这样简单的事情也不适合我。
BEGIN CATCH
IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW
END CATCH
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏。
不,这是不可能的。
这是早期版本中的无效语法,会导致编译错误。
这是不可能隐藏THROW
在EXEC
catch块内无论是作为一个参数的抛必须直接包含在里面抓。
您需要根据要部署到的 SQL Server 的版本来部署所需的代码版本(不幸的是,我所知道的 SSDT 工具中对此也没有很好的支持 - 没有等价于通过以下方式有选择地包含代码行条件编译)
归档时间: |
|
查看次数: |
925 次 |
最近记录: |