Tsql 关于Transact-SQL语法的问题
下面的代码就像一个符咒:Tsql 关于Transact-SQL语法的问题,tsql,syntax,Tsql,Syntax,下面的代码就像一个符咒: BEGIN TRY BEGIN TRANSACTION COMMIT TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK; DECLARE @ErrorMessage NVARCHAR(4000), @ErrorSeverity int; SELECT @ErrorMessage = ERROR_MESSAGE()
BEGIN TRY
BEGIN TRANSACTION
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK;
DECLARE @ErrorMessage NVARCHAR(4000),
@ErrorSeverity int;
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY();
RAISERROR(@ErrorMessage, @ErrorSeverity, 1);
END CATCH
但该代码给出了一个错误:
BEGIN TRY
BEGIN TRANSACTION
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK;
RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1);
END CATCH
为什么?
RAISERROR()
不能将调用作为其参数。需要是常量或变量。RAISERROR()
不能将调用作为其参数。需要是常量或变量。+1 RAISERROR语句通过从sys.messages目录视图检索消息或在运行时构造消息字符串来生成错误消息。因此,我同意@Mitch Wheat的建议。+1 RAISERROR语句通过从sys.messages目录视图检索消息或在运行时构造消息字符串来生成错误消息。所以我同意米奇·麦特的建议。我认为这是一个非常讨厌的“特征”。我认为这是一个非常讨厌的“特征”。