有关Transact SQL语法的问题

时间:2010-06-01 02:29:48

标签: 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(),
           @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

为什么?

2 个答案:

答案 0 :(得分:3)

RAISERROR()无法将调用作为其参数。需要是常量或变量。

答案 1 :(得分:0)

+1 RAISERROR语句通过从sys.messages目录视图中检索消息或在运行时构造消息字符串来生成错误消息。所以同意@Mitch Wheat小伙伴,我会同意他的建议。