分别有两个表
  
入库表:   物料名称   物料型号     入库数量      入库时间     管理员工标号
物料汇总表:    物料名称    物料型号     最大库存量     最小库存量     实际库存量
我想当入库表中的入库数量发生变化时,物料汇总表的实际库存量相应地增加变化的值,请问这用触发器怎么实现,O(∩_∩)O谢谢!!是SQL的触发器.

解决方案 »

  1.   

    create trigger tr_name on 入库表 for update,insert,delete
    as
    begin
          update a set 实际库存量=实际库存量-c.入库数量+b.入库数量
            from 物料汇总表 a,inserted b,delete c
             where a.物料名称=b.物料名称 and a.物料型号=b.物料型号
    end
      

  2.   

    create trigger tr_name on 入库表 for update,insert,delete
    as
    begin
      update
        a 
      set
        实际库存量=实际库存量-c.入库数量+b.入库数量
      from
        物料汇总表 a,inserted b,delete c
      where
       a.物料名称=b.物料名称 and a.物料型号=b.物料型号
    end
      

  3.   

    不行呀,物料汇总表提示0行受影响……物料汇总表的物料名称、型号与入库表的相同也不行,还有这个delete c应该是deleted c  吧
      

  4.   

    前面俩都是高手!
    最好拆成三个触发器来分别处理,这样效率高一些:
    create trigger tr_insert on 入库表 for insert
    as
    begin
      insert into 物料汇总表 
      select 物料名称,物料型号,1000 as 最大库存量, 100 as 最小库存量,入库数量  --这里的1000,100按你的实际值修改
      from inserted
    endcreate trigger tr_update on 入库表 from update
    as
    begin
      update a set 实际库存量=a.实际库存量-b.入库数量+c.入库数量
      from 物料汇总表 a inner join deleted b on a.物料名称=b.物料名称 
      inner jion inserted c on a.物料名称=c.物料名称
    endcreate trigger tr_delete on 入库表 from delete
    as
    begin
      update a set 实际库存量=a.实际库存量-b.入库数量
      from 物料汇总表 a inner join deleted b on a.物料名称=b.物料名称
    end
      

  5.   

    以上各楼触发器的写法,都是针对一个更新一笔入库表的情况,
    如果一次更新多笔入库表的记录, 需要在触发器里用游标处理inderted表每条记录.create trigger tr_insert on 入库表 for insert
    as
    begin
      insert into 物料汇总表 
      select 物料名称,物料型号,1000 as 最大库存量, 100 as 最小库存量,入库数量  --这里的1000,100按你的实际值修改
      from inserted
    endcreate trigger tr_update on 入库表 from update
    as
    begin
      declare @x varchar(200), @y int
      declare ap scroll cursor for
      select 物料名称,入库数量 from inserted
      
      open ap
      fetch first from ap into @x,@y
      while(@@FETCH_STATUS <> -1)
      begin
        update a set 实际库存量=a.实际库存量+@y
        from 物料汇总表 a 
        where a.物料名称=@x
      fetch next from ap into @spid
      endclose ap
    deallocate ap
    endcreate trigger tr_delete on 入库表 from delete
    as
    begin
      update a set 实际库存量=a.实际库存量-b.入库数量
      from 物料汇总表 a inner join deleted b on a.物料名称=b.物料名称
    end