4

我曾经在 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
4

1 回答 1

4

引用MS 文档

TRY...CATCH 构造捕获所有严重程度高于 10 且不会关闭数据库连接的执行错误。

因此,try catch 不会捕获所有可能的错误。除了 try catch 之外,您还可以使用 xact_abort on。

try/catch 给你更多的灵活性,也就是说,当事情不开心时,你不仅限于回滚。

于 2014-01-09T20:21:38.687 回答