我使用 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
在存储过程中使用?或者我的错在哪里?