我曾经在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
答案 0 :(得分:4)
引自MS docs
TRY ... CATCH构造捕获严重性高于10但未关闭数据库连接的所有执行错误。
所以,try catch没有捕获所有可能的错误。除了try catch之外,你还可以使用xact_abort。
try / catch为您提供了更大的灵活性,即,当您不满意时,您不仅限于回滚。