第9节 触发器.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学习目标 理解触发器的作用,应能熟练创建、修改、删除触发器,在实际应用开发时能够灵活运用触发器完成业务规则以达到简化系统整体设计的目的。 课后任务 独自完成第252页实训 * 第15讲 触发器 引例 思考:当学生报名选修SQLServer实用技术课程时,WillNum应自动加1,如何处理? 触发器类型 DML触发器 AFTER触发器 INSTEAD OF触发器 DDL触发器 DML触发器的特点 可以使用包含T-SQL代码的复杂逻辑处理。 如果应用程序需要使用自定义信息和较为复杂的错误处理,则必须使用触发器。 可以实现级联更改。 通过引用其他表中的列,可以实现比CHECK约束更为复杂的约束。 触发器表上的约束在INSTEAD OF触发器执行后但在AFTER触发器执行前检查。 创建DML触发器 SQL格式: CREATE TRIGGER trigger_name On table [WITH ENCRYPTION] {FOR|AFTER| INSTEAD OF} {[INSERT] [,][UPDATE][,] [DELETE]} [NOT FOR REPLICATION] AS [{IF UPADAE(column)[{AND|OR } UPDATE(colunm)][…n]}] sql_statement 创建触发器 【例】创建一个触发器Test1,要求每当在goods表中修改数据时,向客户端显示一条“更新表数据”的消息 RAISERROR(msg_id|msg_str,severity,state) FOR/AFTER/INSTEAD OF的比较 【问题】将上例中触发器中的FOR UPDATE改为INSTEAD OF UPDATE,查看执行结果有何不同。 总结: 使用FOR/AFTER时,执行触发SQL语句(INSERT/UPDATE/DELETE):在触发SQL语句成功执行后,再执行触发器 使用INSTEAD OF时:执行触发器而不执行触发SQL语句 INSERTED表和DELETED表 系统为每个触发器都自动创建了INSERTED表和DELETED表 这两个表的结构和被触发器作用的表的结构相同 触发器执行完毕,系统自动删除这两个表 用户不能对这两个表进行修改,但可以读取 INSERTDE表和DELETE表 当执行INSERT语句时,INSERTED表中保存要向表中插入的所有行。 当执行DELETE语句时,DELETED表中保存要从表中删除的所有行。 当执行UPDATE语句时,相当于先执行一个DELETE操作,在执行一个INSERT操作。 练习 【例9.2】要求输入员工仅限于“采购部、财务部、销售部、库存部” 【例9.3】级联更新、级联删除 表间的任何约束必须靠触发器来实现。 【例9.4】xk数据库中选课表记录的更新、增加、删除与课程表中的报名人数之间的约束。 利用临时表创建触发器 说明:例9.4中的触发器只适用于每次新增、删除一条记录的情况。 创建批量数据触发器 思考:若有批量的数据新增、插入或删除,应该如何修改上例中的触发器? 处理多条记录的触发器简单、易维护,但每次都更新Course中每条记录的报名人数,效率不高 创建多个触发器 【例】创建一个触发器,要求每当employees表中修改数据时,向客户端显示一条消息“二次触发”的消息。 说明:SQL Server2005允许为每个事件(DELETE、INSERT或UPDATE)创建多个的触发器,新定义的触发器不会覆盖已有的触发器。 重命名、删除触发器 重命名触发器SQL格式: sp_rename oldname, newname 删除触发器SQL格式: DROP TRIGGER trigger_name 说明:删除触发器所在的表时,SQL Server将会自动删除与该表相关的触发器 管理触发器 禁用触发器 ALTER TABLE table_name DISABLE TRIGGER trigger_name 恢复使用触发器 ALTER TABLE table_name ENABLE TRIGGER trigger_name 显示数据库中有哪些触发器 请参考联机丛书“sysobjects系统表” 使用注意事项总结 CREATE TRIGGER要在单个批处理中执行 ON table中的表格只能是一个 在同一条CREATE TRIGGER语句中,可以为多个事件( INSERT/DELETE/UPDATE定义相同的触发器操作) 可以为每个事件(INSERT/DELETE/UPDATE)创建多个触发器 使用注意事项总结 触发器只能在当前的数据库中创建,但可以引用当前数据库的外部对象,如其他表 如果一个表的外键DE

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档