我的情况是这样的: 当向A表插入数据时,需要向某用户发送信息通知,由于插入数据方是第三方软件做的,我控件不了,所以我在A表加个触发器来实现,现在问题是发送信息这里的错误是可以忽略的,就是说假如发送失败不影响数据的插入,请问我在触发器里如何忽略错误,让事务继续执行.

解决方案 »

  1.   

    在触发器中加上try catch,然后把最终还是想继续的操作放到final里面,但是从维护数据的一致性来说,不建议忽略,因为你的数据违反了你自己或者sqlserver定下的规则
      

  2.   

    在联机帮助上没查到有final 的信息,能否贴点代码来看看呢? 如果用final?
      

  3.   

    不好意思,误导了,finally是C#的概念,混淆了。你也依旧可以用try catch,只是catch到error时,不回滚,把你想执行的语句放入catch试试。但是不保证能成功。
      

  4.   

    不行,catch 到错误时,事务必须回滚,再对数据库的操作也不能保存。
      

  5.   

    在触发器里面:发送信息的操作
    if @@error <> 0
       print 'error'只是判断一下错误,可以继续运行
      

  6.   

    另外,建议你把发送消息的代码,放到一个存储过程中,然后在触发器中调用这个存储过程:begin try  
       exec 发送信息的存储过程      
    end try  
    begin catch  
      select '执行失败'  
      --这里不会滚
    end catch  
      

  7.   

    再试试这个:--先保存一个事务点
    SAVEPOINT xxx begin try  
       --或者是调用存储过程,或者就直接写代码
       exec 发送信息的存储过程      
    end try  
    begin catch  
      select '执行失败'  
      --一旦出错,只是回滚到上面的事务点,继续执行
      ROLLBACK [WORK] TO SAVEPOINT xxx
    end catch  --其他代码