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目录视图检索消息或在运行时构造消息字符串来生成错误消息。所以我同意米奇·麦特的建议。

我认为这是一个非常讨厌的“特征”。我认为这是一个非常讨厌的“特征”。