触发器快速上手

     这个有点像定时炸弹,在执行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

      那要在哪里管理呢?在企业管理器里。
     
Permalink | Comments (1) | Hits: 1080 | Time: 20:53:37
sql 查找表包含字段
SQL 行数据合并
All Comments
#1 - 生日礼物 - 2007-12-14 17:33:06
别太倚赖数据库去给你做什么。。

我们公司开发的系统用了几年后,因程序员的变更导致很多触发器的东西 没法继续很好的运行,几乎把系统给搞瘫痪。

这东西得慎用。
Post Your Comment
^ ^

Top