2011-11-29 74 views
4

我試過尋找這個,但我還沒有找到任何東西。如果我有類似的東西:在使用提交之前退出存儲過程是否有害?

CREATE PROCEDURE QQ 
AS 

BEGIN TRANSACTION 

BEGIN TRY 

    -- return early and skip commit here 
    IF (Condition = true) 
     RETURN 0 

    COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 

    ROLLBACK 

END CATCH 

交易會發生什麼?

+1

請記住TSQL有效地使用一個計數器來確定一個事務是否打開 - 如果這個計數器沒有適當的遞減... – 2011-11-29 19:28:39

+0

是的,這就是我在想的 – Gixonita

回答

5

它會一直保持打開狀態,直到您COMMIT,ROLLBACK,或者連接關閉並且該spid被終止。

這將阻止其他進程並導致各種其他問題。

通常在您的CATCH區塊中運行如下檢查,以確保您清楚地關閉。

IF @@TRANCOUNT > 0 
ROLLBACK 

WHILE @@Trancount > 0 
BEGIN 
    ROLLBACK 
END 
+0

儘管強制回滾可能不會很好地與其他代碼/ sprocs ...最好使每個單元自清潔IMOHO。 – 2011-11-29 19:31:21

+0

@pst - 抱歉,我的意思是在他的'CATCH'塊內。我會澄清。 – JNK

+0

可能會添加一個標誌變量@Return_Value並跳轉到代碼中的位置,它根據標誌進行回滾或提交,然後返回標誌 – Gixonita

0

只是可以肯定,你退出語句之前我會執行回滾。根據您的數據庫軟件,他們可以在退出時執行自動提交。

相關問題