This question already has an answer here:
Why isn't SET XACT_ABORT ON the default behavior?

(1个答案)


3年前关闭。




我了解SET XACT_ABORT命令的目的:



通常,如果错误将要继续处理事务的情况要比错误要回滚整个事务的情况要多,因为我经常听到DBA和博客建议保留SET XACT_ABORT ON以避免出现不一致的情况交易结果。我已经看到我们所有的存储过程还具有SET XACT_ABORT ON,作为模板代码的一部分。

问题:
  • 如果大多数用例要求XACT_ABORTON,是什么导致SQL Server将其默认为OFF?将XACT_ABORT缺省设置为ON会给SQL Server事务处理增加任何开销吗?
  • SET XACT_ABORT命令仅影响当前 session 。我知道我可以将SSMS从SET XACT_ABORT ON缺省设置为SSMS > Tools > Options > Query Execution > SQL Server > Advanced,如下图所示:
    sql-server - 为什么SQL Server默认将XACT_ABORT设置为OFF?可以将其全局设置为“开”吗? [复制]-LMLPHP
    但这仅限于通过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
    

    有关详细信息,请参见here

    也可以通过SSMS对象资源管理器>服务器属性>连接来设置该选项:

    sql-server - 为什么SQL Server默认将XACT_ABORT设置为OFF?可以将其全局设置为“开”吗? [复制]-LMLPHP

    关于sql-server - 为什么SQL Server默认将XACT_ABORT设置为OFF?可以将其全局设置为“开”吗? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43192298/

    10-16 03:22