【问题标题】:SET XACT_ABORT OFF if transaction terminated by SET XACT_ABORT ON如果事务由 SET XACT_ABORT ON 终止,则 SET XACT_ABORT OFF
【发布时间】:2015-12-19 15:01:45
【问题描述】:

我读到很多人在程序开始时倾向于SET XACT_ABORT ON

CREATE PROC myProc
AS
Begin
BEGIN TRAN
 SET XACT_ABORT ON
 [..code1 that might throw an error..]
 [..code2..]
 SET XACT_ABORT OFF [?]
COMMIT TRAN
END
SET XACT_ABORT OFF [?]

由于运行时错误将终止程序,SET XACT_ABORT 将保留为ON。我有一些问题:

  1. 你在哪里设置它?在CREATE PROC 定义之前、BEGIN 之后还是BEGIN TRAN 之后? SET 处于连接级别,所以我想这三个都不会有所作为?

  2. 什么时候转OFF,如果它在发生错误时留下ON

【问题讨论】:

    标签: sql-server tsql stored-procedures error-handling transactions


    【解决方案1】:

    在 CREATE PROC 定义之前设置 XACT_ABORT 没有多大意义。与 ANSI_NULLS 或 QUOTED_IDENTIFIER 不同,此选项不作为存储过程的属性存储。我会说您应该在CREATE PROC myProc AS 之后或第一个BEGIN 之后立即设置XACT_ABORT,您还可以将SET NOCOUNT ON。

    我不会费心设置 XACT_ABORT 关闭。如果任何代码部分需要将其关闭(例如,在忽略某些错误的 TRY-CATCH 块内),则应在该特定 TRY 块内将其关闭,并在 END CATCH 结束时将其重新打开。

    欲了解更多信息,请参阅:http://www.sommarskog.se/error_handling/Part1.html

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多