CREATE TRIGGER [upd_trigger] ON [dbo].[入倉明細單] 
FOR  INSERT
AS
update 庫存資料 set 總入倉數=總入倉數+a.数量 from (select 原料代碼,sum(數量) 數量 from inserted group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼

解决方案 »

  1.   

    try:CREATE TRIGGER [插入] ON [dbo].[入倉明細單] 
    FOR  INSERT
    AS
    update 庫存資料 set 總入倉數=總入倉數+a.数量 from (select 原料代碼,sum(數量) 數量 from inserted group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼
    insert 庫存資料表 select 原料代碼,sum(數量) 數量 from inserted where not exists(select 1 from 庫存資料表 where 原料代碼=inserted.原料代碼) group by 原料代碼
    goCREATE TRIGGER [删除] ON [dbo].[入倉明細單] 
    FOR  delete
    AS
    update 庫存資料 set 總入倉數=總入倉數-a.数量 from (select 原料代碼,sum(數量) 數量 from deleted group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼
    goCREATE TRIGGER [修改] ON [dbo].[入倉明細單] 
    FOR  update
    AS
    update 庫存資料 set 總入倉數=總入倉數-a.数量+a.数量 from 
      (select 原料代碼,sum(數量) 數量 from deleted group by 原料代碼) a,
      (select 原料代碼,sum(數量) 數量 from inserted group by 原料代碼) b
    where a.原料代碼=庫存資料.原料代碼 and a.原料代碼=b.原料代碼
    go
      

  2.   

    大力:
    為什麼insert 要那麼煩
    而update 和 delete 就不用呢?
    我的意路是希望每次都重新統計 更新..
      

  3.   

    CREATE TRIGGER [upd_trigger] ON [dbo].[入倉明細單] 
    FOR  INSERT
    AS
    update 庫存資料 
    set 總入倉數 = 总入仓数+b.数量
     from 库存资料 a,
      (select 原料代码,sum(数量) 数量 from inserted group by 原料代码) b
       where a.原料代码=b.原料代码insert 库存资料(原料代码,数量) select 原料代码,sum(数量) 数量 from inserted 
    group by 原料代码 where 原料代码 not in (select 原料代码 from 库存资料)
      

  4.   

    CREATE TRIGGER [删除] ON [dbo].[入倉明細單] 
    FOR  delete
    AS
    update 庫存資料 set 總入倉數=a.總入倉數-b.数量 from 库存资料 a,
    (select 原料代碼,sum(數量) 數量 from deleted group by 原料代碼) b
     where a.原料代碼=b.原料代碼
    go
      

  5.   

    不會的..
    我的原料代碼表就是庫存資料表..
    可否簡化點..
    我希望我能看得明自己能了解一下...
    然事再研究...
    就如 delete..
    我就想是通過用sum() 來全部重新統計..
    不要再用 總庫存數=總庫存數 - 刪除的..
    我總覺得這樣很不安全..
      

  6.   

    CREATE TRIGGER [修改] ON [dbo].[入倉明細單] 
    FOR  update
    ASupdate 庫存資料 set 總入倉數=總入倉數-isnull(b.数量,0)+isnull(c.数量,0) from 库存资料 a
    left join  (select 原料代碼,sum(數量) 數量 from deleted group by 原料代碼) b
      on a.原料代码=b.原料代码
    left join 
      (select 原料代碼,sum(數量) 數量 from inserted group by 原料代碼) c
    on a.原料代碼=c.原料代碼
    go这里要用left join因为当修改原料代码的时候,原料代码只会在inserted或者deleted中出现。
      

  7.   

    如果按你的要求销率会底一点,但代码好写!CREATE TRIGGER [一个就可以了] ON [dbo].[入倉明細單] 
    FOR  INSERT,update,delete
    AS
    update 庫存資料 set 總入倉數=a.数量 from (select 原料代碼,sum(數量) 數量 from 入倉明細單 group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼
    go