Hap*_*own 6 t-sql sql-server transactions xact-abort
我理解SET XACT_ABORT命令的目的:
当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则终止并回滚整个事务.
当SET XACT_ABORT为OFF时,在某些情况下,仅回滚引发错误的Transact-SQL语句并继续处理事务.根据错误的严重程度,即使SET XACT_ABORT为OFF,也可以回滚整个事务.OFF是默认设置.
一般情况下,如果出现错误,那么人们希望继续处理事务的情况会超出人们希望在错误时回滚整个事务的情况,因为我经常听到DBA和博客建议继续SET XACT_ABORT ON避免遇到不一致的事务结果.SET XACT_ABORT ON作为模板化代码的一部分,我已经看到所有存储过程也有.
Quesions:
如果大部分的用例需要的XACT_ABORT是ON什么将会导致SQL Server以它默认为OFF?默认XACT_ABORT会ON为SQL Server事务处理增加任何开销吗?
该SET XACT_ABORT命令仅影响当前会话.我知道我可以SSMS默认为SET XACT_ABORT ON从SSMS > Tools > Options > Query Execution > SQL Server > Advanced如图所示在此图像中:
但这仅限于通过SSMS运行的SQL语句,并且对通过应用程序代码/ SSIS包调用的存储过程没有帮助.对于那些程序,我仍然需要SET XACT_ABORT ON在每个程序中重复.有没有办法在数据库级别XACT_ABORT设置ON?我可以设置XACT_ABORT全局的其他任何方式,而不必每次都担心吗?
您可以XACT_ABORT ON在服务器级别将其设置为全局默认连接设置,尽管该命令有点晦涩:
EXEC sys.sp_configure N'user options', N'16384'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参见此处。
也可以通过SSMS对象资源管理器>服务器属性>连接来设置该选项:
| 归档时间: |
|
| 查看次数: |
3133 次 |
| 最近记录: |