我真的需要使用"SET XACT_ABORT ON"吗?

KM.*_*KM. 25 sql-server error-handling transactions sql-server-2005

如果你小心并且在所有内容周围使用TRY-CATCH,并且你真的需要使用以下错误回滚:

SET XACT_ABORT ON
Run Code Online (Sandbox Code Playgroud)

换句话说,是否有任何错误,TRY-CATCH将错过SET XACT_ABORT ON将处理?

gbn*_*gbn 35

请记住,TRY-CATCH无法捕获或不捕获错误XACT_ABORT.

但是,SET XACT_ABORT ON不会影响错误的捕获.它确实保证任何事务都回滚/注定失败.当"关闭"时,您仍然可以选择提交或回滚(以xact_state为准).这是SQL 2005 for的主要行为更改XACT_ABORT

如果客户端命令超时启动并且客户端发送"abort"指令,它还可以删除锁等.如果没有SET XACT_ABORT,如果连接保持打开,则可以保留锁定.我的同事(MVP)和我在年初彻底测试了这一点.

  • "回滚保证"规则的一个例外:如果将RAISERROR与XACT_ABORT一起使用,SQL将不会回滚事务.在这种情况下,您必须显式ROLLBACK.请参见http://www.sommarskog.se/error-handling-I.html#XACT_ABORT (3认同)