这些代码片段是否等效('set xact_abort on'vs'try catch rollback')?

时间:2014-01-09 20:07:53

标签: sql-server xact-abort

我曾经在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 个答案:

答案 0 :(得分:4)

引自MS docs

TRY ... CATCH构造捕获严重性高于10但未关闭数据库连接的所有执行错误。

所以,try catch没有捕获所有可能的错误。除了try catch之外,你还可以使用xact_abort。

try / catch为您提供了更大的灵活性,即,当您不满意时,您不仅限于回滚。