原文地址:http://blog.csdn.net/Haiwer/archive/2007/07/27/1711398.aspx
问题:
有两个表:
Users表(userid,username,userpwd,sex,departid) //userid主键
Departments表(departid,departname,membercount) //departid主键
两表建立了外键约束
membercount是部门人数,在插入一个User的时候相应部门的membercount需要加1,删除的时候需要减1,
修改某个User的departid的时候需要在旧部门人数减1,新部门人数加1。
想用触发器实现在更新Users表时自动更新Departments表的membercount。
--触发器代码
CREATE TRIGGER tr_Users ON Users
FOR INSERT,UPDATE,DELETE
AS
BEGIN
SET NOCOUNT ON
UPDATE Departments
SET membercount=Dep.membercount+b.membercount --Tb.membercount是这次操作的增量,可能为负数
FROM Departments, (
SELECT departid, SUM(membercount) AS membercount --增量由统计得到
FROM (
SELECT departid, 1 AS membercount FROM inserted --插入(Insert操作)或者新部门(Update操作)人数+1
UNION ALL
SELECT departid, -1 AS membercount FROM deleted --删除(Delete操作)或者旧部门(Update操作)人数-1
) AS Ta
GROUP BY departid
HAVING SUM(membercount)<>0 --只取<>0的数据减少更改的记录数
) AS Tb
WHERE Departments.departid=Tb.departid --连接条件
END
GO
发表于 @ 2008年05月04日 17:00:00|评论(loading...)|编辑