SQL Server事务查询中SET XACT_ABORT ON的设置覆盖与作用域疑问
关于SET XACT_ABORT ON的作用域与覆盖问题
放心,你执行SET XACT_ABORT ON不会覆盖其他查询的设置——这个配置的作用域是连接级的,既不是全局服务器级,也不是单条查询级。
具体来说:
- 当你在某个数据库连接里执行这条语句后,它只会对当前连接内后续执行的所有T-SQL操作生效。比如你在SSMS里打开一个查询窗口(这就是一个独立连接),设置XACT_ABORT为ON后,这个窗口里的所有事务查询都会遵循这个规则;但你新开的另一个查询窗口(新连接),还是会使用服务器的默认设置(通常是OFF),除非你在那个窗口里也手动执行
SET XACT_ABORT ON。 - 一旦当前连接断开(比如关闭查询窗口、客户端程序退出),这个设置就会失效。下次重新建立连接时,会自动继承服务器的默认配置,不会保留之前的设置。
- 如果你想修改服务器级的默认值,可以用
sp_configure工具调整,但这只是设置新连接的初始默认值,已经存在的连接不受影响;而且每个连接仍然可以通过SET语句自行修改属于自己的XACT_ABORT状态,不会干扰其他连接。
顺便提一句,XACT_ABORT开启后,当事务执行中遇到严重错误时,会自动终止事务并回滚所有操作,这在处理分布式事务或者需要严格保证数据一致性的场景下特别有用,但核心要记住:它的影响范围仅限你当前正在使用的那个数据库连接。
内容的提问来源于stack exchange,提问作者Hasan Baidoun
相关产品推荐
相关产品推荐

