查了联机丛书上有这么一个选项XACT_ABORT,当然你设置为ON时,当某个操作错误,整个事务自动回滚我一般没这样做,都是对每个DML进行@@ERROR检测,如果错误,ROLLBACK TRAN,我想请教的是什么情况下,用这个XACT_ABORT,因为我的做法也可以啊,是不是我哪里理解没透彻,请老鸟指教!!!!

解决方案 »

  1.   

    使用@@ERROR对DML进行检测,可以得到出错信息,如果出错信息不重要,用XACT_ABORT就可以了
      

  2.   

    你的做法并没有错。
    很多时候我们常用的都是每写一条sql语句紧接判断@@ERROR值,>0的话就回滚。当然有时候我们不想每天语句都来判断@ERROR值,那么这时候可以用SET XACT_ABORT ON
    .一般写法:
    SET XACT_ABORT ON
    BEGIN TRAN 
    ...
    ...
    COMMIT TRAN
    只要有错误发生都会自动会滚,与我们判断@@ERROR效果一样。不过感觉根据每条语句判断,发生错误时候可以清晰的把具体那一条sql语句错误返回客户端。所以如果不偷懒的话,还是判断@@ERROR较好。
      

  3.   

    如果需要保证数据处理的一致性,在事务开始前,都要加Set Xact_abort on。SET XACT_ABORT ON
    BEGIN TRAN 
    ...
    ...
    COMMIT TRAN这样,事务过程中的任何一条SQL语句出错,都会回滚整个事务。