....
begin
 begin TRANSACTION
 insert into yezhu values (@cardid,@cardname,@fahaotime,@yj,@zhujie)
 IF @@ERROR<>0 GOTO Errhandler
 insert into jiaofei   values (@cardid,@time1,@time2)
 IF @@ERROR<>0 GOTO Errhandler
 insert into tempdaka1 (Card_id,yj_user) values (@cardid,@yj)
 IF @@ERROR<>0 GOTO Errhandler
 commit TRANSACTION
  return 2
Errhandler:
  Rollback Tran
  
end
....

解决方案 »

  1.   

    ....
    begin
        declare @error int
        set @error = 0
        begin TRANSACTION
        insert into yezhu values (@cardid,@cardname,@fahaotime,@yj,@zhujie)
        @error = @error + @@error
        insert into jiaofei   values (@cardid,@time1,@time2)
        @error = @error + @@error
        insert into tempdaka1 (Card_id,yj_user) values (@cardid,@yj)
        @error = @error + @@error
        if @error = 0
        begin
         commit TRANSACTION
          return 2
        end
        else
          Rollback Tran
         
    end
    ....
      

  2.   

    楼上几位都正确,也可通过SET XACT_ABORT ON 控制事务,当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。if (@AddEdit=2) and ( @fcardid<>'')
    begin
     SET XACT_ABORT
     begin TRANSACTION
     insert into yezhu values (@cardid,@cardname,@fahaotime,@yj,@zhujie)
     insert into jiaofei   values (@cardid,@time1,@time2)
     insert into tempdaka1 (Card_id,yj_user) values (@cardid,@yj)
     commit TRANSACTION
      return 2
    end