2016-05-26 23 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