这个有点像定时炸弹,在执行SQL语句的时候,例如INSERT,UPDATE,DELETE的时候可以做些另外的事情,比如对一些相关表的操作呀,或者有人擅自修改数据,像薪水什么的,可以发出提示的消息,反正就这么回事,具体可以看下MS SQL 2000的帮助。给个例子:
要求:(1)学生表中的学生添加、修改、删除时自动将user表中的user_id进行添加、修改、删除,在添加时,自动将user_type的值定为“学生”、password的值与user_id相同;
(2)教师表中的学生添加、修改、删除时自动将user表中的user_id进行添加、修改、删除,在添加时,自动将user_type的值定为“教师”、password的值与user_id相同;
(3)此功能可通过sql server的触发器实现。
实现:
--插入触发器
CREATE trigger tr_StuInsert on dbo.Student
for insert as
begin
declare @s_no nvarchar(6)
select @s_no = s_no from inserted
insert into [user] values( @s_no,@s_no,'学生')
end
--删除触发器,由于存在主外键关系,故要进行级联删除
CREATE trigger tr_StuDelete on dbo.Student
for delete as
begin
declare @s_no nvarchar(6)
select @s_no = s_no from deleted
delete choice where s_no = @s_no
delete [user] where [user_id] = @s_no
delete student where s_no = @s_no
end
--更新触发器
CREATE trigger tr_StuUpdate on dbo.Student
for update as
begin
declare @s_no nvarchar(6)
select @s_no = s_no from inserted
update [user] set [user_id]=@s_no , [password]=@s_no
end
--插入触发器
CREATE trigger tr_TeachInsert on dbo.teacher
for insert as
begin
declare @t_no nvarchar(6)
select @t_no = t_no from inserted
insert into [user] values( @t_no,@t_no,'教师')
end
--删除触发器,由于存在主外键关系,故要进行级联删除
CREATE trigger tr_TeachDelete on dbo.teacher
for delete as
begin
declare @t_no nvarchar(6)
select @t_no = t_no from deleted
delete teaching where t_no = @t_no
delete [user] where [user_id] = @t_no
delete teacher where t_no = @t_no
end
--更新触发器
CREATE trigger tr_TeachUpdate on dbo.teacher
for update as
begin
declare @t_no nvarchar(6)
select @t_no = t_no from inserted
update [user] set [user_id]=@t_no , [password]=@t_no
end
| ©2003-2008 Woody. Some Rights Reserved. Feed - Sitemap - Valid XHTML - Valid CSS - Creative Commons Powered by ABlog v3.2. Skin Reserved by Default | Processed in 0.015625 Seconds. 4 Queries | 浙ICP备07029590号 |