第 11章 触发器
11.1 触发器及其作用
11.2 管理触发器
11.1 触发器及其作用
一、触发器:是一种特殊类型的存储过程,是通
过事件进行触发而被执行的,而存储过
程通过存储过程名被直接调用。触发器
是一个功能强大的工具,它使每个站点
可以在有数据修改时自动强制执行其业
务规则。触发器可以用于 SQL Server
约束、默认值和规则的完整性检查。
二、触发器主要优点
?触发器是自动的:当对表中的数据作了任何修改
(比如手工输入或者应用程序采取的操作)之后立
即被激活。
?触发器可以通过数据库中的相关表进行层叠更改。
?触发器可以强制限制,这些限制比用 CHECK 约束
所定义的更复杂。
三,INSERTED表和 DELETED表
是 SQL Server为每个触发器都创建了两个专
用表,是两个逻辑表,不能修改,结构与被触
发器作用的表的结构相同,触发器执行完毕这
两个表将被删除。
INSERTED表中存放要向表中插入的所有行
DELETED表中存放要从表中删除的所有行
11.2 管理触发器
一、创建触发器
1、当创建一个触发器时必须指定:
⑴名称;
⑵在其上定义触发器的表;
⑶触发器将何时激发;
⑷激活触发器的数据修改语句。
2,使用企业管理器创建触发器
在企业管理器中,展开指定的服务器和数
据库项,然后展开要在其上创建触发器的表所
在的数据库,用右键单击该表,从弹出的快捷
菜单中选择所有任务子菜单下的管理触发器选
项,则会出现触发器属性对话框。在该对话框
中,在名称文本框中选择新建,然后在文本框
中输入触发器文本。单击“检查语法”按钮,
则可以检查语法是否正确。单击“应用”按钮,
则在名称下拉列表中会有新创建的触发器名称。
最后,单击“确定”按钮,即可关闭该对话框,
成功创建触发器。
3,使用命令创建触发器
CREATE TRIGGER 触发器名
ON 表 /视图名
[WITH ENCRYPTION]
{ FOR|AFTER|INSTEAD OF }
{ [DELETE][,][INSERT][,][UPDATE] }
[ NOT FOR REPLICATION]
AS
SQL 语句
例 1、创建一触发器,要求每当在 Student表中修改
数据时,将向客户端显示一条“记录已修改”的
信息。
USE Xk
GO
CREATE TRIGGER Test1
ON Student
FOR UPDATE
AS
PRINT '记录已修改! '
测试,UPDATE Student SET Pwd='11111111'
WHERE StuNo='00000001'
例 2、创建一触发器,要求当插入、更新、删除
StuCou表的选课记录时,能更新 Course表中相应
的报名人数
USE Xk
CREATE TRIGGER SetWillNum
ON StuCou
FOR INSERT,UPDATE,DELETE
AS
UPDATE Course SET WillNum=WillNum+1
WHERE CouNo=(SELECT CouNo FROM INSERTED)
UPDATE Course SET WillNum=WillNum-1
WHERE CouNo=(SELECT CouNo FROM DELETED)
SELECT * FROM Course WHERE CouNo='002'
SELECT * FROM Course WHERE CouNo='003'
测试,UPDATE StuCou SET CouNo='002' WHERE
StuNo='00000011' AND CouNo='003'
SELECT * FROM Course WHERE CouNo='002'
SELECT * FROM Course WHERE CouNo='003'
二、查看、修改和删除触发器
1,查看触发器
( 1 ) 使用企业管理器查看触发器信息
( 2 ) 使用系统存储过程查看触发器
sp_help ‘ 触发器名称’
查看触发器的名称、属性、类型和创建时间
sp_helptext ‘ 触发器名称 ’
查看触发器的正文信息
sp_depends ’ 触发器名称 ’
查看指定触发器所引用的表
sp_depends ‘ 表名 ’
查看指定的表涉及到的所有触发器
三,修改触发器
1、使用企业管理器修改触发器正文
在企业管理器中,展开指定的服务器和数
据库,选择指定的数据库和表,用右键单击要
修改的表,从弹出的快捷菜单中选择所有任务
子菜单下的管理触发器选项,则会出现触发器
属性对话框。在名称选项框中选择要修改的触
发器的名称,然后在文本框中修改触发器的
SQL语句,单击“检查语法”按钮,可以检查
语法是否正确。
2、作用 ALTER命令修改触发器正文
3、使用 sp_rename命令修改触发器的名称
sp_rename 旧名,新名
4,作用企业管理器修改触发器的名称
四、删除触发器
1、使用系统命令删除指定的触发器
DROP TRIGGER { trigger } [,...n ]
2,在企业管理器中, 用右键单击要删除的触
发器所在的表, 从弹出的快捷菜单中选择所有
任务子菜单下的管理触发器选项, 则会出现触
发器属性对话框 。 在名称选项框中选择要删除
的触发器, 单击, 删除, 按钮, 即可删除该触
发器 。
注:删除触发器所在的表时, SQL Server将会自
动删除与该表相关的触发器 。
五、嵌套触发器
如果一个触发器在执行操作时引发了另一
个触发器,而这个触发器又接着引发下一个触
发器 ?? 这些触发器就是嵌套触发器。触发器
可嵌套至 32 层,并且可以控制是否可以通过
"嵌套触发器 "服务器配置选项进行触发器嵌套。
如果允许使用嵌套触发器,且链中的一个触发
器开始一个无限循环,则超出嵌套级,而且触
发器将终止。在执行过程中,如果一个触发器
修改某个表,而这个表已经有其它触发器,这
是就要使用嵌套触发器。