CREATE TRIGGER [upd_trigger] ON [dbo].[入倉明細單]
FOR INSERT
AS
update 庫存資料 set 總入倉數=總入倉數+a.数量 from (select 原料代碼,sum(數量) 數量 from inserted group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼
FOR INSERT
AS
update 庫存資料 set 總入倉數=總入倉數+a.数量 from (select 原料代碼,sum(數量) 數量 from inserted group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼
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
為什麼insert 要那麼煩
而update 和 delete 就不用呢?
我的意路是希望每次都重新統計 更新..
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 库存资料)
FOR delete
AS
update 庫存資料 set 總入倉數=a.總入倉數-b.数量 from 库存资料 a,
(select 原料代碼,sum(數量) 數量 from deleted group by 原料代碼) b
where a.原料代碼=b.原料代碼
go
我的原料代碼表就是庫存資料表..
可否簡化點..
我希望我能看得明自己能了解一下...
然事再研究...
就如 delete..
我就想是通過用sum() 來全部重新統計..
不要再用 總庫存數=總庫存數 - 刪除的..
我總覺得這樣很不安全..
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中出现。
FOR INSERT,update,delete
AS
update 庫存資料 set 總入倉數=a.数量 from (select 原料代碼,sum(數量) 數量 from 入倉明細單 group by 原料代碼) a where a.原料代碼=庫存資料.原料代碼
go