Sql Server存儲過程事務處理


-- =============================================
-- Author:<rachael>
-- Create date: <2019-1-4>
-- Description: <存儲過程說明>
-- =============================================
ALTER PROCEDURE [dbo].[pSalaryPay_Upd_ConfirmSalaryPay]
        @CID NVARCHAR(100) = N''     --入參
AS

BEGIN
    SET NOCOUNT ON;
    
    SET XACT_ABORT ON; --開啟產生運行時錯誤,整個事務將終止並回滾

    --在TRY_CATCH塊之前,可以來定義變量。或者進行一些數據判斷    
    --TRY_CATCH塊。說明:TRY/CATCH都是成對出現的,有BEGIN就一定要有END。就像JAVA中的花括號
    BEGIN TRY
    --對可能出現異常的處理,或者判斷。放在TRY_CATCH塊中。
    --對臨時表的操作也可以在這里進行。在上面或者這里定義都可以。
    --添加事務保證下面的行級鎖保持到事務的結束(ROWLOCK、XLOCK必須放在事務中)

    BEGIN TRANSACTION;
        --增、刪、改。對數據庫的操作在事務中。
        --鎖會在事務結束后釋放。不管是回退還是提交。都會釋放。
        --變動前鎖定指定數據。
        SELECT *                    
        FROM DBO.TAB
        WITH(XLOCK,ROWLOCK,READPAST) --排他鎖,行級鎖,指明數據庫引擎返回結果時忽略加鎖的行或數據頁
        WHERE ISDEL = 0
        AND CID = @CID;

        --READPAST 說明:不會返回鎖定的記錄。這個語句的缺點是,其他操作不返回鎖定的記錄,只到事務釋放才會釋放鎖。

        --鎖定后變更
        UPDATE DBO.TAB
        SET ISDEL = 1
        WHERE ISDEL = 0
        AND CID = @CID;

        SELECT 0 AS ErrorCode,'確認成功' AS ErrorMsg;
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;  --如果發生異常,且存在事務,則回滾。
        SELECT 2 AS errorCode,'確認失敗' AS errorMsg;
    END CATCH
END

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM