- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 触发器 —— SQL Server 2005 复习上一讲:存储过程的创建和执行 创建存储过程: CREATE PROC 过程名 [输入参数名列表,输出参数名列表] AS T-SQL 语句 执行存储过程: EXEC 过程名 [输入参数值列表,接收输出值的参数列表] 【示例】在学生表s上创建存储过程,用于查看某个学生的性别。 CREATE PROC P1 @name char(10),@sex char(2) output AS select @sex=ssex from s where sname=@name GO 9.1 触发器概述 1.触发器的概念 触发器是一种特殊的存储过程,它不能被显 式地调用,而是在往表中插入记录、更改记录或 者删除记录时,当上述事件发生时,才被自动地 激活。 触发器的一个应用 有两种做法: 一、删除S表中一条记录,同时删除SC表中相应学号的记录。此时为S表设置一个后触发器。 二、不允许删除S表中的任一条记录。此时可为S表设置一个替代触发器。当试图删除S表中记录时,则显示‘不允许删除!’ CREATE TRIGGER s_drop1 ON S for delete as declare @n char(10) select @n=sno from deleted delete from SC where sno=@n 2.触发器的功能 (1)强化条件约束 (2)拒绝或回滚违反参照完整性的操作 (3)级联修改数据库相关表 (4)比较修改前后数据的变化,根据变化采取一定的处理 3 触发器的分类 (1)DML触发器: DML触发器是当数据库中发生数据操纵语言DML事件时启用,如INSERT语句、UPDATE语句、DELETE语句。 (2)DDL触发器:DDL触发器是当数据库中发生数据定义语言DDL事件时启用,如CREATE、ALTER等。 9.2 DML触发器 DML触发器是当数据库中发生数据操纵语言DML 事件时启用。 DML触发器分为以下两类: (1)after触发器 (2)instead of触发器 DML触发器分为以下两类: (1)after触发器:这类触发器是在记录已经改变之后,才会被激活执行。 比如:增加一条记录之后,激活该触发器。 (2)instead of触发器:一般是用来取代原本的操作,在记录变更之前发生的,它并不去执行原来SQL语句里的操作(update、insert、delete),而去执行触发器本身所定义的操作。 比如:执行INSERT命令想为表增加一条记录,但该表已定义了一个instead of触发器,此时INSERT命令不被执行,而去执行instead of触发器所定义的操作。 在数据库中为每个DML触发器都定义了两个特殊的 表,一个是Inserted表,一个是Deleted表。由系统来维 护,在触发执行时存在,在触发结束时消失。 在用户执行INSERT语句时,所有被添加的记录都会 存储在Inserted表中; 在用户执行DELETE语句时,所有被删除的行会发送 到Deleted表; 对于UPDATE语句,SQL Server先将要进行修改的记 录存储到Deleted表中,然后再将修改后的数据复制到 Inserted表。 9.2.3 创建DML触发器 1. 创建DML触发器的注意事项 (1)创建DML触发器的语句CREATE TRIGGER必须是批处理中的第一条语句 (2)触发器只能在当前数据库创建,但可以引用当前数据库的外部对象。 (3)创建触发器的权限默认为表的所有者。 2 创建after触发器 (1) 使用SSMS创建触发器 (2) 使用T-SQL创建触发器 使用T-SQL创建触发器 CREATE TRIGGER 触发器名 ON 表名 {FOR|AFTER} {[INSERT][,][UPDATE][,][DELETE]} AS IF UPDATE(列名1) {AND|OR} UPDATE(列名2) BEGIN T-SQL语句 END FOR|AFTER:FOR与AFTER同义,指定触发器只有在 触发SQL语句中指定的所有操作都已成功后才激发。(后触发) IF UPDATE(列名1) :用于指定对表中的某一列进行INSERT或UPDATE操作时,触发器才起作用。 例9-1 为表s创建三个触发器, 触发器名分别为tr1、tr2 、tr3的, 当执行添加操作时,激活触发器tr1 , 当执行删除操作时,激活触发器tr2 , 当执行更新操作时,激活触发器tr3 。 为表创建INSERT触发器 创建tr1触发器: CREATE TRIGGER tr1 ON S FOR INSERT AS SELECT *
文档评论(0)