begin tran a1
  declare rs cursor scroll for select a=1
  open rs
  declare @a int  begin tran b1
    set @a='1a'    --错误行
  commit tran b1  close rs
  deallocate rs
  print 'bbbb'
commit tran a1
print 'aaaa'为什么他不打印bbbb,  aaaa呢? 即为什么不执行事务之后的语句呢??

解决方案 »

  1.   

    begin tran a1 
      declare rs cursor scroll for select a=1 
      open rs 
      declare @a int   begin tran b1 
        set @a='1a'    --错误行 
      commit tran b1   close rs 
      deallocate rs 
      print 'bbbb' 
    commit tran a1 
    go
    print 'aaaa' 
    --估計裡面發生錯誤,回滾了
      

  2.   

    貌似SQL2000如果一條語句出錯了,那么其他的都不會執行了
    貌似SQL2005的Try可以做到這個.
      

  3.   

    --回滚后继续执行
    begin tran
    insert into code_login_user (username) values ('jjj')
    commit tran
    print 'bbbb'
    --回滚后不会再执行。  严重错误
    declare @i int
    begin tran
      set @i='aa'
    commit tran
    print 'bbbb'