dobear

Nerver try, nerver know

用户操作
[即时聊天] [发私信] [加为好友]
dobearID:dobear_0922
8101次访问,排名13505(-7),好友82人,关注者158人。
dobear
dobear_0922的文章
原创 14 篇
翻译 0 篇
转载 3 篇
评论 26 篇
最近评论
救援隊募集:アダルトエロ不倫
guoyz_1:顶你
guoyz_1:顶你
guoyz_1:顶你
guoyz_1:顶你
文章分类
收藏
    相册
    bear
    SQL
    Leo——感谢生活!(RSS)
    天道酬勤(RSS)
    石头(RSS)
    近身剪(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 一个典型的Sql Server 触发器应用收藏

    新一篇: 根据日期计算当月有多少天 | 旧一篇: SQL中合并多行记录的方法总汇

    原文地址: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...)|编辑

    新一篇: 根据日期计算当月有多少天 | 旧一篇: SQL中合并多行记录的方法总汇

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © dobear