Что здесь происходит?SQL Server - XACT_ABORT ON + @@ ОШИБКА Проверка., - PullRequest
3 голосов
/ 11 мая 2011

Что происходит с этим типом сценария?

SET XACT_ABORT ON

BEGIN TRANSACTION

    ---DO SOMETHING HERE THAT CAUSES AN ERROR

COMMIT TRANSACTION

if @@error != 0
raiserror('SP failed. Step 7.', 20, -1) with log GO

Я предполагаю, что, поскольку XACT_ABORT равно ON, COMMIT TRANSACTION никогда не происходит (потому что все откатывается и завершается), а также не выполняется последнее утверждение (проверка на @@error и затем вызов * 1008) *).

1 Ответ

3 голосов
/ 11 мая 2011

Correct.

SET XACT_ABORT выпрыгивает из пакета. Ваш ЕСЛИ является частью той же партии.

Если вы хотите обрабатывать ошибки, используйте BEGIN TRY и т. Д.

SET XACT_ABORT ON
BEGIN TRY
BEGIN TRANSACTION

    ---DO SOMETHING HERE THAT CAUSES AN ERROR

COMMIT TRANSACTION
END TRY
BEGIN CATCH
    raiserror('SP failed. Step 7.', 20, -1) with log
END CATCH
GO

Меня также заинтриговала серьезность 20, потому что это разрывает связь. Обычно вы используете 16, что является ошибкой, определенной пользователем.

...