Являются ли эти фрагменты кода эквивалентными ('установите 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 дает вам больше гибкости, т. е. вы не ограничены просто откатом, когда что-то не устраивает.