下面是代码事务
AS
SET XACT_ABORT ON  --强制出错全部回滚
BEGIN TRAN 
    ----代码内容 IF @@ERROR<>0 GOTO errhandle 
COMMIT TRAN
 
RETURN
  errhandle:
IF @@ERROR<>0
BEGIN
  ROLLBACK TRAN
 
              
END

解决方案 »

  1.   

    你是都包在一个事务中还是分开多个事务?另外你的update语句是不是应该还要加上f<>'false'啊?
      

  2.   

    f<>'false' 是加了的,是一个事务中处理的。
      

  3.   

    事务隔离级别没改过吧?另外你说你是mssql2000,2000没有 XACT_ABORT的哦
      

  4.   

    方法一,提高隔离级别:ALTER DATABASE AdventureWorks2008R2 SET ALLOW_SNAPSHOT_ISOLATION ON;这个会导致tempdb增大
    方法二,在update之前先用if来判断数据,避免你7楼说的情况
      

  5.   

    1、用的是2000 SET ALLOW_SNAPSHOT_ISOLATION ON 未找到
    2、想了解出这个问题原因。
      

  6.   

    2000没有乐观并发。你这个原因我看是不可重复读的问题,也就是你7楼估计的那个情况。因为insert 过程中,你这种insert不会锁住前面的数据,所以insert可以随意执行,但是update的时候就要锁住where条件中用到的那些数据,所以我觉得再update前先判断比较合理。
      

  7.   

    1、用的是2000 SET ALLOW_SNAPSHOT_ISOLATION ON 未找到
    2、想了解出这个问题原因。你的是2000是吧,那就不能用这个了SET ALLOW_SNAPSHOT_ISOLATION ON ,这个是2005以后才有的