在存储过程中使用“SET XACT_ABORT ON”有什么好处?

在存储过程中使用“SET XACT_ABORT ON”有什么好处?

SET XACT_ABORT ON在存储过程中使用有什么好处?



大话西游666
浏览 1799回答 3
3回答

慕盖茨4494581

SET XACT_ABORT ON指示SQL Server回滚整个事务并在发生运行时错误时中止批处理。它涵盖了在客户端应用程序上发生的命令超时而不是SQL Server本身(默认XACT_ABORT OFF设置未涵盖)的情况。由于查询超时将使事务保持打开状态,SET XACT_ABORT ON因此建议在具有显式事务的所有存储过程中使用(除非您有特定的理由),因为应用程序在与开放事务的连接上执行工作的后果是灾难性的。Dan Guzman博客上有一个很棒的概述,

慕标琳琳

引用MSDN:当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则终止并回滚整个事务。当SET XACT_ABORT为OFF时,在某些情况下,仅回滚引发错误的Transact-SQL语句并继续处理事务。实际上,这意味着某些语句可能会失败,使事务“部分完成”,并且调用者可能没有出现此类失败的迹象。一个简单的例子:INSERT INTO t1 VALUES (1/0)    INSERT INTO t2 VALUES (1/1)    SELECT 'Everything is fine'此代码将在XACT_ABORT OFF时“成功”执行,并在XACT_ABORT为ON时终止,错误将终止(“INSERT INTO t2”将不会执行,客户端应用程序将引发异常)。作为一种更灵活的方法,您可以在每个语句(旧学校)之后检查@@ ERROR,或使用TRY ... CATCH块(MSSQL2005 +)。我个人更喜欢在没有理由进行某些高级错误处理时设置XACT_ABORT。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server