日期:2014-05-17  浏览次数:20602 次

请教:更新子表时,触发修改主表的触发器如何写?
需求说明:有采购主表 P(id,closed),id是单号,closed表示当该单的所有采购数量交齐后,更新为1.
ps(id,name,qty,closed,inqty),id是单号,name是采购物品,qty是采购的数量,closed表示当该项物品交齐后,更新为1,inqty是已经交货的数量。
例如:
表头(对应p表):
单号:00001,0
表体(对应ps表):
0001,牙刷,100,0,10
0002,毛巾,100,0,10

当该单中所有物品交齐后,如何使用触发器更新主表的closed字段。


------解决方案--------------------

CREATE TRIGGER [dbo].[tr_ps]
   ON [dbo].[ps]
   AFTER INSERT,DELETE,UPDATE
AS 
begin
SET NOCOUNT ON;

UPDATE p SET closed=CASE WHEN a.closed=1 THEN 0 ELSE 1 end
FROM
(
SELECT id,MAX(CASE WHEN closed=0 THEN 1 ELSE 0 END) closed
FROM ps
WHERE id IN 
(
SELECT id FROM INSERTED
UNION 
SELECT id FROM DELETED
)
GROUP BY id
) a
WHERE p.id=a.id
end