【问题标题】:SET XACT_ABORT ON not Worked in Create ProcedureSET XACT_ABORT ON 在创建过程中不起作用
【发布时间】:2012-07-08 09:36:05
【问题描述】:

我使用 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?还是我的错在哪里?

【问题讨论】:

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


    【解决方案1】:

    您需要在 Create procedure 语句中提及set xact_abort on

     CREATE PROCEDURE [Members].[MyProc](
     ........
    
     )
     AS
     SET XACT_ABORT ON
    BEGIN
    BEGIN TRANSACTION [MyProcCHK]
    ....
    COMMIT TRANSACTION [MyProcCHK]
    END
    GO
    

    【讨论】:

    • 谢谢,里面的语句就够了,不需要像我一样放在外面,是吗?
    • 在 create 语句中提及它就足够了。外面不用提了
    猜你喜欢
    • 2010-11-12
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多