0

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ストアドプロシージャで使用できませんか?または私のせいはどこですか?

4

1 に答える 1

1

set xact_abort onCreateプロシージャステートメント内で言及する必要があります

 CREATE PROCEDURE [Members].[MyProc](
 ........

 )
 AS
 SET XACT_ABORT ON
BEGIN
BEGIN TRANSACTION [MyProcCHK]
....
COMMIT TRANSACTION [MyProcCHK]
END
GO
于 2012-07-08T09:54:34.543 に答える