我有个存储过程,如下
......
begin tran 
 update t1 with(rowlock) set ....
 update t2 with(rowlock) set...
 update t3 with(rowlock) set...
 update t4 with(rowlock) set...
commit tran
.............
 我想问下如果在事务中有部分语句执行了,那么事务会自动回滚么? 如果不能自动回滚,那如何判断,进行回滚呢?如果不是语句错误,而是并发执行导致不能update,那么如何进行回滚呢?

解决方案 »

  1.   

    begin tran 
     update t1 with(rowlock) set ....
     update t2 with(rowlock) set...
     update t3 with(rowlock) set...
     update t4 with(rowlock) set...
    IF @@error = 0 
       commit tran
    else
       rollback tran  
    end
      

  2.   

    begin tran 
    update t1 with(rowlock) set ....
        update t2 with(rowlock) set...
      update t3 with(rowlock) set...
      update t4 with(rowlock) set...
    IF @@error = 0 
        commit tran
    else
        rollback tran
      

  3.   

    请问:
    如果我部分语句没执行,而不是因为update语句出错,这样上面的方法可以用么?
      

  4.   

    to :yesyesyes() 
    如我所写,如果部分语句失败,那我不做判断
    (IF @@error = 0 
       commit tran
    else
       rollback tran)我的语句也会自动回滚的对吧?请高手指教,谢谢!
      

  5.   

    如果部分语句没执行,而不是因为update语句出错,是會回滾整個事務的