我想要写一个事务事务中执行如下语句insert  a(a) values(1)
insert  b(b) values(2)
insert  c(c) VALUES(3)要求是执行中无论遇到任何错误(可能是表名指定不正确,可能是列名指定不正确,可能是列的数据状态不正确)都能正常回滚到最初状态,请问这样的事务该怎么写

解决方案 »

  1.   

    表名、列名
    只可用動態exec('insert  a(a) values(1)')--判斷--05事務方法
    begin try
    begin tram
    ..SQL
    commit tran
    end try
    begin catch
    select error_message()
    rollback tran
    end catch
      

  2.   

    begin tran
       insert  a(a) values(1) 
       insert  b(b) values(2) 
       insert  c(c) VALUES(3) 
    if @@error=0
       commit
    else
       rollback
      

  3.   


    begin tran mytran   insert  a(a) values(1) 
       insert  b(b) values(2) 
       insert  c(c) VALUES(3) if @@error=0
       commit tran mytran
    else
       rollback tran mytran
      

  4.   


    表名、列名 
    只可用動態 exec('insert  a(a) values(1)')--判斷 --05事務方法 
    begin try 
    begin tra…
    [/Quote]
    用此语句遇到表名不正确无法回退到最初状态,比如begin try 
    begin tran
    insert into b values(1)
    insert into a values(1)
    commit 
    end try 
    begin catch 
    select error_message() 
    rollback tran 
    end catch 
    b表有而a表没有执行上述语句B表中会插入记录
      

  5.   


    begin tran  
          insert a(a) values(1)
          if @@error<>0 goto HandleError
          insert b(b) values(2) 
          if @@error<>0 goto HandleError
          insert c(c) VALUES(3) 
          if @@error<>0 goto HandleError
          HandleError:  rollback tran
    commit tran