我想为一个表创建一个触发器,当用户向这个表向这个表添加、修改和删除数据时,触发器能够自动的对另一个表作想同的操作。现在遇到一个问题,怎么判断用户是添加还是修改或是删除呢?求高手解答。

解决方案 »

  1.   

    判断(对于insert,delete,update一起的触发器)if not exists (select 1 from deleted)
        --插入
    else if not exists (select 1 from inserted)
        --删除
    else
        --更新
      

  2.   

    其实是可以不必判断的create trigger tr_copy 
    on tabA
    for insert,delete,update
    as--删除被删除的或者被修改的
    delete tabB 
    from tabB b,deleted d
    where b.PK=d.PK--插入新插入的或者修改后的
    inser tabB 
    select * from insertedgo--是不是这样简单点
      

  3.   

    有,不过有个条件:两表都必须有主键(假设为PK),而且主键不允许更改
    create trigger tr_copy 
    on tabA
    for insert,delete,update
    as--删除
    delete b
    from tabB b inner join deleted d on b.PK=d.PK
    left join inserted i on d.PK=i.PK
    where i.PK is null--更新
    update b
    set col1=i.col1,col2=i.col2,....
    from tabB b inner join inserted i on b.PK=i.PK
    inner join deleted d on i.PK=d.PK
    --插入
    inser tabB 
    select i.* from inserted i left join deleted d on i.PK=d.PK
    where d.pk is null
    go--是不是这样简单点