1. 程式人生 > >在儲存過程中新增事務

在儲存過程中新增事務

--存在就刪除

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