我在A表定义了一个Insert触发器,要求如下:
如果有数据插入A表,解析插入的纪录,然后依次更新B表、C表、D表(总之逻辑比较复杂)
我定义了一个事务,如果更新B表、C表、D表时有一处出错,就在Catch 语句中回滚事务不幸的是:插入A表的那条纪录也被 Rollback了,而我需要保留这条数据!请高人指点!谢谢先PS:我调查过,触发器为一隐式事务,那么说如果我要保留A表插入的数据就不能使用 Rollback了吗?不使用的话我又如何保证B、C、D表的同时提交?

解决方案 »

  1.   

    ---事务控制语句的使用
    Begin Tran
      /*A组语句序列*/
    Save Tran Save_Point
      /*B组语句序列*/
    if @@Error<>0      --注意@@Error为0时表示未出错
      RollBack Tran Save_Point 
       /*仅回退B组语句序列*/
    Commit Tran
      /*提交A组语句,且若未回退B组语句则B组语句*/
      

  2.   

    Begin Tran
      Insert Into A Select ......
    Save Tran Save_Point
      Update B ...
      Update C ...
      Update D ...
    if @@Error<>0    
       Begin
        RollBack Tran Save_Point 
         Print '更新失败'
       End
    Else
    Commit Tran
      

  3.   

    dearxiaoxin() ( ) 信誉:100  2007-09-13 17:16:36  得分: 0
    错误提示:
    当前事务无法提交,而且无法回滚到保存点。请回滚整个事务
    -------------------------------------------------------
    给出你的代码看看...
      

  4.   

    尝试在触发器中设定保存点,并回滚
    但是错误信息的提示显示似乎SQLServer并不支持这样的操作
    一样感谢你的解答!