我有三张表xsyjupdate、nyxscpdl、A2008XSYJ 其中xsyjupdate(年,月)和nyxscpdl(tjdh,ryxm,cpmc,zj)还有A2008XSYJ(tjdh,ryxm,cpmc,zj01,zj02,zj03……zj12)触发器建在xsyjupdate(年,月)上,当它月份改变的时候,把nyxscpdl(tjdh,ryxm,cpmc,zj)添加到A2008XSYJ相应的ZJ月份中。帮我看看怎么写,xsyjupdate中月份是什么,nyxscpdl中的ZJ就添加到A2008XSYJ相应的ZJ月份。
CREATE trigger ADD on xsyjupdate for update
as 
begin
if (COLUMNS_UPDATED() & 2) = 2
   begin

insert into A2008XSYJ (tjdh,ryxm,cpmc) select tjdh,ryxm,cpmc from nyxscpdl
   end
end 

解决方案 »

  1.   

    if (COLUMNS_UPDATED() & 2) = 2
    改為:
    if update(月)
    begin
    ...
    end
      

  2.   

    但是任何让nyxscpdl中的ZJ,添加到A2008XSYJ相应的ZJ月份中去呢?
      

  3.   

    知道的朋友可以帮忙写全吗?主要就是最后那个总计字段,任何让它填到A2008XSYJ中相应的ZJ月份
      

  4.   

    --可以枚舉出來再插入
    CREATE trigger ADD on xsyjupdate for update
    as 
    begin
    if if update(月)
    begin
         declare @m int
         set @m=0
         select @m=cast(月 as int) from inserted --此處單獨插入一筆時有效,多筆時須另外寫
         if @m=1
         insert into A2008XSYJ (tjdh,ryxm,cpmc,zj01) select tjdh,ryxm,cpmc from nyxscpdl,@m
         if @m=2
         insert into A2008XSYJ (tjdh,ryxm,cpmc,zj02) select tjdh,ryxm,cpmc from nyxscpdl,@m
    ......
    end
    end
      

  5.   

    --此處單獨插入一筆時有效,多筆時須另外寫   select @m=cast(月 as int) from inserted 
    不太明白,可以解释一下吗
      

  6.   

    若批量插入數據時,假設其中包括4、5、6月的,
    那么用
    select @m=cast(月 as int) from inserted 
    只能取出一個值
      

  7.   

    不好意思,貼錯了,更正
    CREATE trigger ADD on xsyjupdate for update
    as 
    begin
    if if update(月)
    begin
         declare @m int
         set @m=0
         select @m=cast(月 as int) from inserted --此處單獨插入一筆時有效,多筆時須另外寫
         if @m=1
         insert into A2008XSYJ (tjdh,ryxm,cpmc,zj01) select tjdh,ryxm,cpmc,@m from nyxscpdl
         if @m=2
         insert into A2008XSYJ (tjdh,ryxm,cpmc,zj02) select tjdh,ryxm,cpmc,@m from nyxscpdl
    ......
    end
    end