簡體   English   中英

存儲過程中的交易

[英]Transaction in Stored procedure

請有人幫忙。

我在一個作業中有幾個存儲過程,在其中一個過程中,我開始一個事務以刪除一些行,如果行大於10,則回滾。 但是,如果沒有,我不希望立即提交,因為2存儲過程以后我會做類似的事情。 但是,如果在這種情況下count大於10,我希望它一直回滾到我啟動事務時的狀態(兩個存儲過程之前)

是否可以在存儲過程中啟動事務並具有多個回滾並在某個地方的結尾處立即提交,還是必須將所有代碼放入1個存儲過程中才能做到這一點?

您可以使用@@ TRANCOUNT來確定您是否有未完成的未提交事務,然后使用它來指示存儲過程的邏輯。

CREATE PROCEDURE Proc1
AS
BEGIN
    BEGIN TRANSACTION
    // DO STUFF
    IF (@@ROWCOUNT > 10)
        ROLLBACK TRANSACTION
END

CREATE PROCEDURE Proc2
AS
BEGIN
    IF (@@TRANCOUNT > 0)
    BEGIN
        // DO STUFF
        IF (@@ROWCOUNT > 10)
            ROLLBACK TRANSACTION
    END
END

CREATE PROCEDURE Proc3
AS
BEGIN
    IF (@@TRANCOUNT > 0)
    BEGIN
        // DO STUFF
        IF (@@ROWCOUNT > 10)
            ROLLBACK TRANSACTION
        ELSE
            COMMIT TRANSACTION
    END
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM