2013-08-29 82 views
1

請有人幫忙。存儲過程中的交易

我在作業中有幾個存儲過程,並在其中一個我開始一個事務刪除一些行,如果行大於10,然後我回滾。然而,如果沒有我不想立即犯下,因爲2個存儲過程後來我做了類似的事情。然而,如果在這種情況下,如果計數大於10,我希望它在我盯着交易(前兩個存儲過程)時一直回滾到

是否可以在存儲過程中啓動事務並具有多個回滾並在某處結束提交權限,還是必須將所有代碼放入一個存儲過程才能執行此操作?

+0

MySQL或SQL-Server? – RandomSeed

+0

在我看來,最好避免在存儲過程中完全提交和回滾。 –

回答

2

您可以使用@@ 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 
+0

謝謝,那正是我想要的。 :) – Abbaskhan