我想设置SET XACT_ABORT ON
与交易一个SQL Server 2008 R2的存储过程,因此,无论是在创作剧本:如何在SQL Server事务中设置“SET XACT_ABORT ON”?
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
行:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE MyProc
AS
BEGIN TRAN
...
我在哪里错了或者有什么诀窍?如何正确定义SET XACT_ABORT ON
?
您没有在过程定义中包含'SET'语句。当你在2008年时,你应该看看'TRY ... CATCH'。 –
@马丁·史密斯:你的意思是不包括'SET XACT_ABORT ON'所有,而是由赶上'TRY..CATCH'错误,并明确'ROLLBACK'事务? – rem
参见[这个答案](http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set-xact-abort-on-in-a-stored-procedure/1150350#1150350 )和下面的评论来讨论这个问题。我绝对不会因为你的代码在TRY ... CATCH可用时测试SQL Server 2008上的'@@ ERROR'而烦恼。只要提到'XACT_ABORT'在'TRY'块中有不同的效果。 –