Microsoft® SQL Server™ 忽略提交内部事务。根据最外部事务结束时采取的操作,将提交或者回滚事务。如果提交外部事务,则内层嵌套的事务也会提交。如果回滚外部事务,则不论此前是否单独提交过内层事务,所有内层事务都将回滚。

解决方案 »

  1.   

    if @@Error<>0             --如果错误发生就会执行begin了                   
        begin 
         Rollback Tran                   
         Return -1                    
        end  
      

  2.   

    感觉应该判断写在前面!!!Create Proc spBuyBook(           
       @iBookID int,   
       @iOperatorID int 
      ) 
      As  
      begin                              
       Begin Tran  
          if  @@Error<>0 goto Err_Handle
        Exec spDoSomething
            insert into .........                  Commit Tran 
        return 0
       Err_Handle:                   
        begin 
         Rollback Tran                   
         Return -1                    
        end                       
       end
      

  3.   

    to 楼主:没有问题,可以回滚
    示例
    --测试数据
    select top 3 * into ta from sysobjects
    go
    create proc sp_1
    as
    delete ta where id=1
    go
    --示例
    begin tran
    exec sp_1
    insert ta(name, id) select 'sysabc', 4
    if @@error<>0
    rollback tran
    else 
    commit tran
    go
    select * from ta
    --清除
    drop proc sp_1
    drop table ta