我写了个存储过程里面包含事务 但是当我insert失败的时候 事务没有回滚 并报出了主键重复的错误 语句终止 
请我如何解决~~

解决方案 »

  1.   

    在事务开始前,加一句 set xact_abort oncreate procedure sp_name
    as
    begin
    set xact_abort on
    begin tran
     [事务代码]
    commit tran
    end
      

  2.   

    设置自动回滚当前事物。把主键删了看看。把错误打印出来  print @@error
      

  3.   

    "当主键重复就报错"是正常的.(不报错才不正常)但是,有set xact_abort on的话,事务中遇错是自动回滚的.也就是说其实没有插入,事务中的其他语句也一起被回滚了.
      

  4.   

    SQL2000没有try.. catch..可以在前端程序中用try.. catch..捕获异常,才知道是否执行成功.加set xact_abort on的目的是保证事务可正常回滚,即全做或全不做.
      

  5.   

    是不是 用sqlserver 2005就能起到回滚作用 并返回操作是否成功?
      

  6.   

    SQL2000,有"set xact_abort on"也能自动回滚,但无法返回操作是否成功.SQL2005及以上版本,有"set xact_abort on"也能自动回滚,用try.. catch..就能返回操作是否成功.
      

  7.   

    谢了问题以解决 把数据库挂在sqlserver2005就可以了