一个典型的Sql Server 触发器应用

本文介绍如何使用SQL触发器来自动维护部门表中的人数字段。当进行用户表的插入、更新或删除操作时,触发器会相应地调整部门人数,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.youkuaiyun.com/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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值