在存储过程中添加事务

--存在就删除

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[NAME]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ProcName]
GO

--还有一种删除的写法

IF EXISTS(SELECT * FROM sysobjects WHERE type='p' AND NAME='ProcName')
BEGIN
    DROP PROC ProcName
END
go

 

--创建一个存储过程

CREATE PROCEDURE ProcName
    
AS
BEGIN
       

BEGIN TRY
        DECLARE @TranFlag INT --事务标志 0:新建事务 1:保存已经存在事务点
        IF @@TRANCOUNT = 0 --事务个数为0,创建新事务
        BEGIN
            BEGIN TRAN CurrTran
            SET @TranFlag = 0
        END
        ELSE --已经存在事务
            SET @TranFlag = 1
        SAVE TRAN CurrTran --保存事务点,提交或回滚时从该事务点开始。
        
        ------------------------------
        --进行相关操作。

 


        ------------------------------
        
        IF @TranFlag = 0 --新建事务时才进行提交。
            COMMIT TRAN CurrTran
    END TRY
    BEGIN CATCH
            PRINT ERROR_MESSAGE() --打印一下错误的消息文本
            
            IF @TranFlag = 0
                BEGIN
                --回滚整个事务
                    ROLLBACK TRAN
                END
            ELSE
                BEGIN
                --回滚当前事务点
                    ROLLBACK TRAN CurrTran
                END
   END CATCH

END
GO

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页