日期:2014-05-18  浏览次数:20513 次

急询,这样的触发器该怎么写???
第一个表:模块表
moduleid       modulename
M001                     模块一
M002                     模块二
第二个表:角色表
roleid       rolename
R001           角色一
R002           角色二
第三个表:权限分配表
roleid     moduleid     browse     add     edit     delete
    R001         M001             0             0         0           0
    R002         M001             0             0         0           0
    R001         M002             0             0         0           0
    R002         M002             0             0         0           0        
我想分别在模块表和角色表上设置一个触发器,当往模块表或者角色表里面插入一条记录的时候就在权限分配表里插入n条记录。
比如说往模块表里插入M003则触发器在权限分配表里插入了
R001       M003     0     0     0     0
R002       M003     0     0     0     0
如果往角色表里插入记录也是类似的情况。
请问这样的触发器该怎么写!!


------解决方案--------------------
create table A(moduleid varchar(20), modulename varchar(20))
insert A select 'M001 ', '模块一 '
union all select 'M002 ', '模块二 '
create table B(roleid varchar(20), rolename varchar(20))
insert B select 'R001 ', '角色一 '
union all select 'R002 ', '角色二 '
create table C(roleid varchar(20), moduleid varchar(20), [browse] bit, [add] bit, edit bit, [delete] bit)
insert C select 'R001 ', 'M001 ', 0, 0, 0, 0
union all select 'R002 ', 'M001 ', 0, 0, 0, 0
union all select 'R001 ', 'M002 ', 0, 0, 0, 0
union all select 'R002 ', 'M002 ', 0, 0, 0, 0

create trigger tr_A_insert on A
for insert
as
declare @moduleid varchar(20)
select @moduleid=moduleid from inserted

insert C
select roleid, @moduleid, 0, 0, 0, 0 from B
go


create trigger tr_B_insert on B
for insert
as
declare @roleid varchar(20)
select @roleid=roleid from inserted

insert C
select @roleid, moduleid, 0, 0, 0, 0 from A
go


insert A
select 'M003 ', '模块三 '


select * from C

--result
roleid moduleid browse add edit delete
-------------------- -------------------- ------ ---- ---- ------
R001 M001 0 0 0 0
R002 M001 0 0 0 0
R001 M002 0 0 0 0
R002 M002 0 0 0 0
R001 M003 0 0