表A
  编号   单位名称
  001    三星
  002    大禹
  003    微软表B  编号   单位名称    备注
  001    电信         XXX
  002    联通         XXX
要求 
  表B一但发生插入或更新,那表A也发生插入或更新,只是把表B中的新记录也插到表A中,表B更新发生更新,表A也一样(两个表中有相同记录的时候) 
 

解决方案 »

  1.   

    create trigger tg_InsUpd
    on 表B for insert, update
    begin
     if(update(表B))
     begin
      if exists(select 1 from 表A where 编号 in (select 编号 from inserted))
        update 表A set 单位名称 = t.单位名称
        from 表A a, inserted t
        where a.编号 = t.编号
      else
        insert 表A select 编号, 单位名称 from inserted
     end
    end
      

  2.   

    create trigger tri_name on B
    after update,insert
    as--插入
    insert into A
    select * from inserted 
    where A.编号 not in(select 编号 from inserted)--更新update A
    set A.单位名称=t.单位名称
    from inserted t 
    where A.编号 in(select 编号 from inserted)
      

  3.   


    Create trigger InsertOrUpdateB on b
    for 
    insert,update
    as
    begin
    if not exists(select 1 from Deleted) --没有更新,只有插入
    begin
    insert into a(编号,单位名称) select 编号,单位名称 from inserted
    endif exists(select 1 from deleted)--更新操作
    begin
    update a set a.单位名称=i.单位名称  from a,inserted i,deleted d
    where a.编号=d.编号
    endend
      

  4.   

    --以下的已经通过测试CREATE  trigger InsertOrUpdateB on b
    for 
    insert,update
    as
    begin
    if not exists(select 1 from Deleted) --没有更新,只有插入
    begin
    insert into a(编号,单位名称) select 编号,单位名称 from inserted
    endif exists(select 1 from deleted)--更新操作
    begin
    update a set a.编号=i.编号,a.单位名称=i.单位名称  from a,inserted i,deleted d
    where a.编号=d.编号
    endend
      

  5.   

    use test
    go--创建测试表
    create table a
    (
      编号 varchar(255),
      单位名称 varchar(255)
    )
    gocreate table b
    (
      编号 varchar(255),
      单位名称 varchar(255),
      备注 varchar(255)
    )
    go--创建测试数据insert into a 
    select '001','三星'
    union
    select '002','大禹'
    union
    select '003','微软'
    go
    insert into b
    select '001','电信','XXX'
    union
    select '002','联通','XXX'
    go
    --编写触发器create trigger a_insupdate
    on b after insert,update
    as
    begin
      if exists (select top 1 1 from a,inserted where a.单位名称 = inserted.单位名称)
      begin
         update a
         set a.编号 = inserted.编号
         from a,inserted
         where a.单位名称 = inserted.单位名称
      end
      if exists (select top 1 1 from a,inserted where a.编号 = inserted.编号)
      begin
        update a
        set a.单位名称 = inserted.单位名称
        from a,inserted
        where a.编号 = inserted.编号
      end
      else
      begin
       insert into a select 编号,单位名称 from inserted
      end
    end
    --测试结果表A编号     单位名称
    001 三星
    002 大禹
    003 微软
    008 万维网
    009 电信表B编号    单位名称   备注
    009 电信  XXX
    002 联通  XXX
    008 万维网  XXX