为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

大话西游666 2019-08-16 14:03:12
在存储过程中使用“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博客上有一个很棒的概述,


查看完整回答
反对 回复 2019-08-16
?
慕标琳琳

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。


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 1795 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信