我想设置SET XACT_ABORT ON
在带有事务的 SQL Server 2008R2 存储过程中,因此在创建脚本中执行此操作:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET XACT_ABORT ON
GO
CREATE PROCEDURE MyProc
AS
BEGIN TRAN
...
IF @@ERROR <> 0
BEGIN
GOTO Done
END
...
IF @@ERROR <> 0
BEGIN
GOTO Done
END
COMMIT TRAN
Done:
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
GO
成功创建后,我通过单击“修改”存储过程选项并在生成的文件中检查事务ALTER PROCEDURE
我看不到脚本SET XACT_ABORT ON
line:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE MyProc
AS
BEGIN TRAN
...
我哪里错了或者有什么技巧?如何正确定义SET XACT_ABORT ON
?
你通常设置xact_abort
作为存储过程主体的一部分:
CREATE PROCEDURE MyProc
AS
SET XACT_ABORT ON
BEGIN TRAN
....
有两个“特殊”设置是从创建该过程的会话中记住的。来自MSDN的解释: http://msdn.microsoft.com/en-us/library/ms190356.aspx
存储过程使用执行时指定的 SET 设置执行
时间,但 SET ANSI_NULLS 和 SET QUOTED_IDENTIFIER 除外。已存储
指定 SET ANSI_NULLS 或 SET QUOTED_IDENTIFIER 的过程使用
在存储过程创建时指定的设置。如果在内部使用
存储过程中,任何 SET 设置都会被忽略。
因此,当您创建存储过程时,SQL Server 会将 QUOTED_IDENTIFIER 选项从连接复制到过程定义。目标是具有不同 QUOTED_IDENTIFIER 设置的其他人仍然可以获得过程作者预期的行为。
但情况并非如此XACT_ABORT
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)