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