SET XACT_ABORT ON не работает в процедуре создания

Я использую 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 ответ

Решение

Вы должны упомянуть set xact_abort on внутри оператора процедуры Create

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

 )
 AS
 SET XACT_ABORT ON
BEGIN
BEGIN TRANSACTION [MyProcCHK]
....
COMMIT TRANSACTION [MyProcCHK]
END
GO
Другие вопросы по тегам