SET XACT_ABORT ON
begin tran
.....
.....
commit
在出错后回滚所有修改。

解决方案 »

  1.   

    @@error只对最后一个数据库操作是否正确做标志;
    若在前面有INSERT或UPDATE不成功时,没有判断,
    只要
    update out_lib set post='Y',post_by=@name1,post_date=getdate() where out_lib_no=@inlib_no
    就认为成功了。
      

  2.   

    使用一个事务,在每个SQL后记下@@ERROR的值,在最后作一个COMMIT或ROLLBACK.
    我认为这样比较好,且结构易读.
      

  3.   

    个人认为不是所有的表都要一个事务,当你SET XACT_ABORT ON以后,无论你语句做错了什么sql都自动回滚,比如你里面的insert,如果主键重复就算出错。所以你需要一个总事务,然后在里面做你需要的东西,该加事务的加事务,不该加的不加。总事务最后只需要commit因为除了对就是错,而对于总事务错就自动回滚。
    你可以试试,但是逻辑复杂了不保证不出问题。
      

  4.   

    try use 分布提交事务(嵌套事务)来处理!对每一的事务进行判断,最后提交全部的事务,
    SET XACT_ABORT ON