在存储过程中使用“SET XACT_ABORT ON”有什么好处?SET XACT_ABORT ON在存储过程中使用有什么好处?
3 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
SET XACT_ABORT ON
指示SQL Server回滚整个事务并在发生运行时错误时中止批处理。它涵盖了在客户端应用程序上发生的命令超时而不是SQL Server本身(默认XACT_ABORT OFF
设置未涵盖)的情况。
由于查询超时将使事务保持打开状态,SET XACT_ABORT ON
因此建议在具有显式事务的所有存储过程中使用(除非您有特定的理由),因为应用程序在与开放事务的连接上执行工作的后果是灾难性的。
Dan Guzman博客上有一个很棒的概述,
慕标琳琳
TA贡献1830条经验 获得超9个赞
引用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。
- 3 回答
- 0 关注
- 1795 浏览
添加回答
举报
0/150
提交
取消