再详细点吧,看不明白需求应该要有一个单独的 部门表(部门) 假如还有一个员工表 (部门,员工)create trigger test on dbo.部门表 for delete as if((select count(1) from inserted) = 0) ----delete 部门 begin delete from 员工表 where 部门 in (select 部门 from deleted) end
部门人数的增减 --------创建表 create table t(部门 varchar(1000),员工 varchar(1000))insert into t select 'personal', 'wang' union select 'personal', 'zhang' union select 'personal', 'li' union select 'finances','zhang' union select 'finances','sun' union select 'finances', 'qian'---------------写触发器 if exists(select name from sysobjects where name = 'TestTrigger' and type = 'TR') drop Trigger TestTrigger gocreate Trigger TestTrigger on dbo.t for delete, insert ,update as if ( (select count(1) from deleted) = 0) --insert 新增 begin ---人数统计 select count(1) as 人数,部门 from t group by 部门 end else if ( (select count(1) from inserted) = 0) --delete 减员 begin ---人数统计 select count(1) as 人数,部门 from t group by 部门 end else ---------部门调整 begin ---人数统计 select count(1) as 人数,部门 from t group by 部门 end
go
--------------------------测试 select * from tinsert into t select 'jinnji','liu'select * from tdelete from t where 部门 = 'jinnji'select * from tupdate t set 部门='jinnji' where 员工='qian'select * from tupdate t set 部门='finances' where 员工='qian'select * from t--------------结果部门 员工 finances sun finances zhang personal li personal wang personal zhang(5 件処理されました)人数 部门 2 finances 1 jinnji 3 personal(3 件処理されました) (1 件処理されました)部门 员工 jinnji liu finances sun finances zhang personal li personal wang personal zhang(6 件処理されました)人数 部门 2 finances 3 personal(2 件処理されました) (1 件処理されました)部门 员工 finances sun finances zhang personal li personal wang personal zhang(5 件処理されました)人数 部门 2 finances 3 personal(2 件処理されました) (0 件処理されました)部门 员工 finances sun finances zhang personal li personal wang personal zhang(5 件処理されました)人数 部门 2 finances 3 personal(2 件処理されました) (0 件処理されました)部门 员工 finances sun finances zhang personal li personal wang personal zhang(5 件処理されました)
假如还有一个员工表
(部门,员工)create trigger test
on dbo.部门表
for delete
as
if((select count(1) from inserted) = 0) ----delete 部门
begin
delete from 员工表
where 部门 in (select 部门 from deleted)
end
--------创建表
create table t(部门 varchar(1000),员工 varchar(1000))insert into t
select 'personal', 'wang'
union
select 'personal', 'zhang'
union
select 'personal', 'li'
union
select 'finances','zhang'
union
select 'finances','sun'
union
select 'finances', 'qian'---------------写触发器
if exists(select name from sysobjects
where name = 'TestTrigger'
and type = 'TR')
drop Trigger TestTrigger
gocreate Trigger TestTrigger
on dbo.t
for delete, insert ,update
as
if ( (select count(1) from deleted) = 0) --insert 新增
begin
---人数统计
select count(1) as 人数,部门
from t
group by 部门
end
else
if ( (select count(1) from inserted) = 0) --delete 减员
begin
---人数统计
select count(1) as 人数,部门
from t
group by 部门
end
else
---------部门调整
begin
---人数统计
select count(1) as 人数,部门
from t
group by 部门
end
go
--------------------------测试
select * from tinsert into t
select 'jinnji','liu'select * from tdelete from t
where 部门 = 'jinnji'select * from tupdate t
set 部门='jinnji'
where 员工='qian'select * from tupdate t
set 部门='finances'
where 员工='qian'select * from t--------------结果部门 员工
finances sun
finances zhang
personal li
personal wang
personal zhang(5 件処理されました)人数 部门
2 finances
1 jinnji
3 personal(3 件処理されました)
(1 件処理されました)部门 员工
jinnji liu
finances sun
finances zhang
personal li
personal wang
personal zhang(6 件処理されました)人数 部门
2 finances
3 personal(2 件処理されました)
(1 件処理されました)部门 员工
finances sun
finances zhang
personal li
personal wang
personal zhang(5 件処理されました)人数 部门
2 finances
3 personal(2 件処理されました)
(0 件処理されました)部门 员工
finances sun
finances zhang
personal li
personal wang
personal zhang(5 件処理されました)人数 部门
2 finances
3 personal(2 件処理されました)
(0 件処理されました)部门 员工
finances sun
finances zhang
personal li
personal wang
personal zhang(5 件処理されました)
插入新数据时,inserted中有数据,deleted中没有数据
删除旧数据时,inserted中没有数据,deleted中有数据
更新数据时,inserted和deleted中都有数据