SQL_server基础教程(第二版)董翔英第9章.pptVIP

SQL_server基础教程(第二版)董翔英第9章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【例9.21】查询当前数据库所有触 发器。 SELECT * FROM sysobjects WHERE type=’TR’   将得到当前数据库内现有的触 发器列表,执行结果如图9.17。 9.3.2更改名称   执行系统存储过程sp_rename, 其语法格式为: sp_rename old_name new_name 其中old_name为旧的过程名或触发器名,new_name为新的过程名或触发器名。 如将触发器jsy_updtri更名为jsy_trigger,执行命令 sp_rename jsy_updtri jsy_trigger 或 EXEC sp_rename jsy_updtri jsy_trigger 本 章 小 结   存储过程和触发器实际都是T-SQL语句集合,是存储在服务器中的程序代码,用以提SQLServer服务器性能。   本章先讲解了存储过程的作用,及系统内建存储过程与用户存 储过程的特点和分类,介绍了用户 存储过程的建立方法,及如何使用 存储过程实现各种特定查询。本章 介绍了触发器的作用,以及FTER 触发器和INSTEAD OF触发器的 特点,讲解了系统如何创建两个虚 拟表即INSERT表和DELETED 表,及如何使用虚拟表来实现数据 操作安全。本章最后介绍了几个常 用的系统存储过程。   关于存储过程和触发器的建立 与使用,无论命令方式还是界面方 式都具有共同之处,需要融会 贯通,举一反三,关键在于如何灵活运用存储过程和触发器,给用户 提供方便的数据查询和安全的读写 机制,提高数据库运行效率,这需 要有一定的编程技巧和数据库管理 与维护经验。 在线教务辅导网: 更多课程配套课件资源请访问在线教务辅导网 馋死 如图9.12所示,用户此时发现上例中添加的记录仍然保留在表xc1中,可见在定义触发器时,定义的INSTEAD OF选项取消了触发xc1_trigger2的DELETE操作,所以该记录未被删除。 2. 触发器使用限制 1、CREATE TRIGGER必须是批处理中的第一条语句。 2、触发器只能在当前数据库中创 建,但可以引用其他数据库的对象。 3、触发器只能应用到一个表中, 但一个表中可使用多个触发器,同一类型的触发器也可使用多个。 4、如果指定了触发器所有者限定触发器名,要以相同的方式限定表名。 5、应尽量避免从触发器返回任何数据影响执行性能,尽量避免在触 发器代码中包含SELECT语句或变量赋值。一般情况下,应用程序修改一个表时,并不希望处理从服务器返回的结果,触发器也不是为了普通的数据检索而设置的操作,如果需要完成这种工作,可以使用存储过程。 3. 命令格式应用举例 【例9.15】在jsy表中创建一触发器,让用户一次仅能删除一条驾驶员记录,以防用户不小心执行 DELETE FROM jsy而未加任何条 件时,表内全部数据消失。 USE traffic1 IF EXISTS(SELECT name    FROM sysobjects WHERE name=’jsy_deltri’ AND type=’TR’) DROP TRIGGER jsy_deltri CREATE TRIGGER jsy_deltri ON jsy FOR DELETE AS DECLARE @row_cnt INT SELECT @row_cnt=count(*) FROM DELETED IF @row_cnt1 BEGIN     PRINT’此删除操作可能 会删除多条驾驶员记录!!!’ ROLLBACK TRANSACTION END GO 【例9.16】假设有另一行车表xc2,利用如下命令导入xc1总表。 INSERT INTO xc1 SELECT * FORM xc2 针对xc1表创建一触发器,将xc1总表新建数据中驾照号不在jsy表中的数据行删除 CREATE TRIGGER xc_instri ON xc1 FOR INSERT AS DELETE FROM xc1 WHERE 驾照号 IN(SELECT 驾 照号 FROM INSERTED a WHERE a.驾照号 NOT IN (SELECT 驾照号 FROM jsy ) GO 【例9.17】对jsy表创建一触发器,若对驾照号和姓名列修改则给出提示信息,并取消操作。 USE traffic1 GO CREATE TRIGGER jsy_updtri ON jsy FOR update AS IF UPDATE(驾照号) OR UPDATE(姓名) BEGIN PRINT’此数据未经许可不能 修改

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档