Являются ли эти фрагменты кода эквивалентными ('установите xact_abort в' vs ', попробуйте перехватить откат')?

Я использовал этот фрагмент кода в своей хранимой процедуре в SQL Server:

create procedure proc_name
    --declare variables
as
    set nocount on
    begin transaction
    begin try
        --do something
        commit transaction
    end try begin catch
        rollback transaction
        ;throw
    end catch
go

но сегодня я узнал, что такое 'set xact_abort on'. Следующий код эквивалентен предыдущему? Есть ли различия между ними?

create procedure proc_name
    --declare variables
as
    set nocount on
    set xact_abort on
    begin transaction
    --do something
    commit transaction
go

1 ответ

Решение

Цитирование из MS документов

Конструкция TRY…CATCH перехватывает все ошибки выполнения с серьезностью выше 10, которые не закрывают соединение с базой данных.

Таким образом, попытка catch не перехватывает все возможные ошибки. Вы также можете использовать xact_abort, чтобы попробовать catch.

try / catch дает вам больше гибкости, т. е. вы не ограничены просто откатом, когда что-то не устраивает.

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