2016-05-26 103 views
1

我有一個存儲過程作爲回滾事務給錯誤

Begin 
    Begin Transaction [Tran] 
    Begin Try 
     counter=0 --demo condition 

     while(counter<10) 
     begin 
      condition = condition +1; 

      insert something 
      delete something 

      commit transaction [Tran] 
     end -- While End 

    end try 
    Begin Catch 
     rollback transaction [Tran] 
    End Catch 
End --End for Begin 
Go 

我在做什麼錯?

當我運行它,我得到的錯誤是:

的ROLLBACK TRANSACTION請求沒有相應的BEGIN TRANSACTION。

+1

你一旦開始交易,而在每次迭代中'while'循環犯了。我猜的第一個錯誤就是你沒有對應''commit'的'begin tran'。這就是爲什麼你陷入catch block。並以相同的原因到達那裏發生另一個錯誤在嘗試回滾它之前先在catch塊中打印'error_message()'並檢查那裏是什麼。 –

回答

1

您只有一次開始事務,而您每次都在循環運行時提交。

+0

你能告訴我,如何做到這一點,當我試圖在while循環中添加1個開始事務時,它會進入無限循環 –

+0

這是因爲你的循環代碼。 –

0

我建議你閱讀這篇關於transactions and error handling的文章。

嘗試使用此語法

BEGIN TRY 
BEGIN TRANSACTION 

--Your code here 

END TRY 

BEGIN CATCH 
IF (@@ERROR <> 0) 
     ROLLBACK TRANSACTION 
    ELSE 
     COMMIT TRANSACTION 
END CATCH