SET XACT_ABORT ON未在创建过程中使用

时间:2012-07-08 09:36:06

标签: sql sql-server sql-server-2008 stored-procedures xact-abort

我使用SQL Server 2008 SP3(10.0.5500)我对回滚事务有一些问题,起初我需要知道一些事情。这是我的创建过程脚本:

USE [MYDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET XACT_ABORT ON
GO

If Exists(Select * From Sys.Objects Where [object_id]=Object_Id(N'[Members].[MyProc]') And ObjectProperty([object_id], N'IsProcedure') = 1)
Begin
Drop Procedure [Members].[MyProc]
Print 'Procedure [Members].[MyProc] Dropped!'
End
GO

CREATE PROCEDURE [Members].[MyProc](

 ....

)
AS 
BEGIN
    BEGIN TRANSACTION [MyProcCHK]
    ....
    COMMIT TRANSACTION [MyProcCHK]
END
GO

运行此脚本后,我从以下位置检查过程:MyDB ->Programmability->StoredProcedures并单击以修改[Members].[MyProc]然后显示以下脚本:

USE [MYDB]
GO
/****** Object:  StoredProcedure ... ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [Members].[MyProc](

 ....

)
AS 
BEGIN
    BEGIN TRANSACTION [MyProcCHK]
    ....
    COMMIT TRANSACTION [MyProcCHK]
END
GO

那么SET XACT_ABORT ON在哪里?为什么没有在这里显示?由于存储过程中的回滚事务存在一些问题,我认为SET XACT_ABORT ON从未保存过。我对吗?如果是的话,解决方案是什么?我不能在存储过程中使用SET XACT_ABORT ON?或者我的错在哪里?

1 个答案:

答案 0 :(得分:1)

您需要在Create procedure statement

中提及set xact_abort on
 CREATE PROCEDURE [Members].[MyProc](
 ........

 )
 AS
 SET XACT_ABORT ON
BEGIN
BEGIN TRANSACTION [MyProcCHK]
....
COMMIT TRANSACTION [MyProcCHK]
END
GO