sql server中开启一个事务,如果语句执行出错,是否该事务自动回滚(不需要rollback语句),
同时该事务自动结束,我测试是这样的,但是总不是很确定。。特地问下。

解决方案 »

  1.   

    SET XACT_ABORT ON 
    出错自动回滚,默认是OFF
      

  2.   

    不是吧?那还要rollback干什么?
      

  3.   

    SET XACT_ABORT
    指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server&S482; 是否自动回滚当前事务。语法
    SET XACT_ABORT { ON | OFF }注释
    当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
      

  4.   

    http://topic.csdn.net/u/20110225/15/e9bf21c0-9eed-4e1f-a62e-7fd48684c199.html?10552
      

  5.   

    但是我实际测试没效果,怎么使用SET XACT_ABORT???
      

  6.   

    应用举例如下,供参考.create table t2 (ID INT PRIMARY KEY)  --新建测试表,ID是主键.SET XACT_ABORT ON  --开启事务自动回滚begin tran
      insert into t2 select 1
      insert into t2 select 2
      insert into t2 select 2  --制造主键重复的错误.
      insert into t2 select 3
    commit transelect ID from t2 -->空表,因事务过程错误,全部自动回滚.--如果未加 SET XACT_ABORT ON 则
    select ID from t2
    ID
    ----
     1
     2
     3
      

  7.   

    off 也会自动回滚的,你用update语句测试就知道了
      

  8.   

    insert语句出错的时候事务不会自动回滚,这个时候需要rollback了