我在表A上建了个after insert的触发器,往表B里面插入数据;如果插入表B数据异常,会导致也不能往表A里面插入数据;这个可以怎么在触发器里面处理异常,使往表B插入数据异常时自动退出触发器?平时很少使用sqlserver2000,只会Oracle,往指教。表A是生产用的表,所以一定要处理好异常。sqlserver2000 触发器 异常

解决方案 »

  1.   

    可以结合触发器和事务,保证数据的统一性。参考:
    http://www.sdau.edu.cn/support/aspjc/part12/12-3-4.cfm.htm
      

  2.   

    触发器(Trigger)顾名思义就是在每次对于数据操作的时候,自动执行的代码。
    一般不会在触发器中建立数据异常机制,因为这个会引起很多麻烦,比如会过滤掉很多你需要的错误信息。你可以在触发器中,在插入b表的时候,先作判断。
      

  3.   

    真的可以,亲测了。
    use test
    create table t1(id int,val varchar(10))
    create table t2(id int,val varchar(10),check(id>10))
    go
    create trigger tr_test on t1
    after insert
    as begin
    insert into t2
    select id,val from inserted
    if @@error>0
    rollback tran
    end
    go
    insert into t1 values(1,'tgq')
    go
    select * from t1
    select * from t2
    drop table t1
    drop table t2
      

  4.   

    ....
    ........
    insert into B表 
    select id,val from inserted 
    if @@error>0 
    rollback tran 
    return
    ............