触发器定义问题,请求大神解答

yyyylybdxhz 2016-05-27 08:36:51
创建一个INSERT 触发器,实现当在职工表中插入一个职工信息时,自动调整部门表中相应的职工人数,从而实现职工表和部门表的数据一致性。
...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-05-27
  • 打赏
  • 举报
回复
with x as(select 部门号,count(*) n from inserted group by 部门号) update 部门 set 职工人数 = isnull(职工人数,0) + x.n from x , 部门 where 部门.部门号=x.部门号- ---职工号改为部门号
arteezy95 2016-05-27
  • 打赏
  • 举报
回复
你是长治学院的吗?
yyyylybdxhz 2016-05-27
  • 打赏
  • 举报
回复
create trigger inserter on 职工 for insert as begin with x as(select 职工号,count(*) n from inserted group by 职工号) update 部门 set 职工人数 = isnull(职工人数,0) + x.n from x , 部门 where 部门.部门号=x.职工号 消息 102,级别 15,状态 1,过程 inserter,第 7 行 '职工号' 附近有语法错误。
卖水果的net 版主 2016-05-27
  • 打赏
  • 举报
回复
调部门 或 删除一个人,可以自己写一个
卖水果的net 版主 2016-05-27
  • 打赏
  • 举报
回复

create table dept(id int, name varchar(10), num int);
create table emp(id int, did int, name varchar(10));
go
create trigger emp_ins
on emp after insert
as
begin
    with x as(select did , count(*) n from inserted group by did)
    update dept set num = isnull(num,0) + x.n
    from x , dept where dept.id = x.did
end
go
insert into dept values(1,'dev',0),(2,'sales',0)
go
print '插入员工数据前'
select * from dept 
go
insert into emp values(1,1,'zhangsan'),(2,1,'lisi'),(3,2,'wangwu')
go
print '插入员工数据后'
select * from dept 
go
drop table dept , emp 
go



插入员工数据前
id          name       num
----------- ---------- -----------
1           dev        0
2           sales      0


插入员工数据后
id          name       num
----------- ---------- -----------
1           dev        2
2           sales      1



w_xxxbbb 2016-05-27
  • 打赏
  • 举报
回复
那你还得作update或者delete触发器,如果有人离职怎么办? 不如在表结构上进行处理 部门编号 员工信息 是否离职 只需要count 一下 没有离职的员工即可 group by 部门编号

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧