事务的回滚问题
我在存储过程中要调用n个别的存储,一个存储不成功,就要回滚,改如何来作呢?   
 CREATE   PROCEDURE      OnlineHanding       
          @UserName   		VARCHAR(   50   ), 
          @ContractID                                          UNIQUEIDENTIFIER 
 AS   
 BEGIN   TRANSACTION   
 DECLARE         @ErrMessage                           BIT         
 -----第一步处理不合格数据 
 EXEC   OnlineCheckData   @UserName      
 ------更新      MST_AirlineId      和      FraeGoupID      ,RoutingI,以及检查和插入Routing和插入相关的表AirPortGroup,AirPortElement 
 EXEC   OnlineUpdateData   @UserName,   @ContractID   ,@ErrMessage   OUTPUT   
 --其他的操作......   
 ...........   
 IF   @@ERROR   =   0 
    COMMIT   TRANSACTION 
 ELSE   
    ROLLBACK   TRANSACTION 
 --这句delete是一定要做的 
 DELETE      OnlineTempTable         WHERE   Operator   =   @UserName 
 GO   
------解决方案--------------------是的,你应该从被调用的存储过程返回值进行判断,而作出事务的处理决定。
------解决方案--------------------关注 
------解决方案--------------------@@error是用来判断最近的SQL语句执行成功与否的全局函数,不建议楼主使用这个东西判断存储过程是否执行成功,相反地你应该在每个存储过程中使用这个函数来返回不同的值用来标志你的存储过程是否执行成功。使用return返回存储过程的结果,就好像C语言的函数一样的。在调用存储过程时候根据return的返回值判断是否执行成功就可以了。