如果事务被 SET XACT_ABORT ON 终止,则 SET XACT_ABORT OFF
SET XACT_ABORT OFF if transaction terminated by SET XACT_ABORT ON
我读到许多人倾向于 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
。我有一些问题:
你在哪里设置的?在 CREATE PROC
定义之前,在 BEGIN
之后还是在 BEGIN TRAN
之后? SET
处于连接级别,所以我想这三个都不会有什么不同?
什么时候转OFF
如果留ON
出现错误?
在 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
我读到许多人倾向于 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
。我有一些问题:
你在哪里设置的?在
CREATE PROC
定义之前,在BEGIN
之后还是在BEGIN TRAN
之后?SET
处于连接级别,所以我想这三个都不会有什么不同?什么时候转
OFF
如果留ON
出现错误?
在 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