Что здесь происходит? SQL Server - XACT_ABORT ON + @@ERROR Проверка.,

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

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 а потом звонит raiseerror).

1 ответ

Решение

Правильный.

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, что является ошибкой, определенной пользователем.

Другие вопросы по тегам