例如 A表 两个字段 AA、BB
     B表 三个字段 AA、BB、CC 
cc字段是可以为空的
用触发器如何实现 把A表中的数据同步到B表中啊?我写了后给我报错插入错误: 列名或所提供值的数目与表定义不匹配另外求教一下:用复制监视器的方式是不是只能是针对相同字段值的两个表进行同步?

解决方案 »

  1.   

    create tigger tri_mytri on a
    for update
    as
    begin
    update  b set  aa=i.aa,bb=i.bb from b join inserted i on a.aa=i.aa
    end
      

  2.   

    create tigger tri_mytri on a
    for update
    as
    begin
    if update(a)
    update  b set  aa=i.aa,bb=i.bb from b join inserted i on a.aa=i.aa
    end
      

  3.   

    我觉得应该从三方面考虑 insert update delete 举个insert的例子
    create trigger gengxin_insert on A
    after insert
      as  
      begin 
        insert  B select * from inserted
      end
      go楼上的有错误吧? b join i  怎么能 on a=i 呢?
      

  4.   


    create trigger gengxin_insert on A
    after insert
      as   
      begin  
      insert B(AA,BB) select * from inserted
      end
      go
    --B表的列和A表的类数量不一致,不出错才怪...SQL没那么智能
      

  5.   


    除了自增字段,而且位置还必须在第一列上
    Create table #a
    (
    ID int IDentity
    ,name varchar(100)
    )
    Insert #a Select name From sysobjects
    drop table #aCreate table #a(name varchar,id int identity(1,1))
    Insert #a Select name From sysobjects
    drop table #a
      

  6.   

    正确答案如下
    create trigger gengxin_insert on A
    after insert
      as  
      begin 
      insert B(aa,bb) select m.aa,m.bb from inserted m where aa=m.aa and bb=m.bb
      end
      go
      

  7.   

    你这写法有点画蛇添足,要防止重复插入,你没说明主键,暂时如下写create trigger gengxin_insert on A
    after insert
      as  
      begin 
      insert B(aa,bb) select aa,bb from inserted m
      where not exists (
         select 1 from b
         where aa = m.aa and bb = m.bb
         )
      end
      go
      

  8.   

    触发器需考虑清楚逻辑,现在上面的写法,包括我写的,都是考虑不全的建议搂主看看我的blog,关于触发器的分类描述