Вопрос о синтаксисе Transact SQL - PullRequest
0 голосов
/ 01 июня 2010

Следующий код работает как брелок:

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 ]

3 голосов
/ 01 июня 2010

RAISERROR() не может принимать звонки в качестве своих параметров. Должен быть константой или переменной.

0 голосов
/ 01 июня 2010

+ 1 Оператор RAISERROR генерирует сообщение об ошибке, либо получая сообщение из представления каталога sys.messages, либо создавая строку сообщения во время выполнения. Поэтому, соглашаясь с парнем @Mitch Wheat, я пойду с его рекомендацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...