数据库系统原理及应用 高教版 CH07 SQL Server数据库编程.pptVIP

数据库系统原理及应用 高教版 CH07 SQL Server数据库编程.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.4.2 创建触发器 /* 插入类型的触发器,inserted表结构与Student表结构相同 */ CREATE TRIGGER ClassInsMany -- 一次插入多条学生记录的插入类型的触发器 ON Student FOR INSERT AS -- 使用游标来实现 BEGIN /* 定义一个变量@classNo,用于接受所插入的学生所属的班级编号 */ DECLARE @classNo char(6) DECLARE curStudent CURSOR FOR --定义游标对多个插入的学生进行逐个处理 SELECT classNo FROM inserted OPEN curStudent FETCH curStudent INTO @classNo WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE Class SET classNum=classNum+1 WHERE classNo=@classNo --修改班级表中班级编号为@classNo的班级人数 FETCH curStudent INTO @classNo END CLOSE curStudent DEALLOCATE curStudent END 7.4.2 创建触发器 也可以不使用游标,直接通过一条SQL语句完成班级人数的修改,插入类型的触发器如下: /* 插入类型的触发器,inserted表结构与Student表结构相同 */ CREATE TRIGGER ClassInsMany1 -- 一次插入多条学生记录的插入类型的触发器 ON Student FOR INSERT AS -- 不使用游标来实现 BEGIN UPDATE Class Cla SET Cla.classNum=Cla.classNum+InsCnt.cnt FROM ( SELECT Ins.classNo, count(*) cnt --统计每一个班级插入学生的人数cnt FROM inserted Ins GROUP BY Ins.classNo ) InsCnt WHERE InsCnt.classNo=Cla.classNo END 注意: 原则上并不限制一张基本表上定义的触发器的数量。 由于触发器是自动执行的,为一张基本表建立了多个触发器,必然加大系统的开销。 如果触发器设计得不好,会带来不可预知的后果。 触发器常常用于维护复杂的完整性约束,不用于业务处理。 用户的业务处理常常使用存储过程实现。 凡是可以用一般约束限制的,就不要使用触发器。 如限制性别仅取男和女,可以使用检查约束CHECK实现。 一张表可以有多个触发器,且同一类型触发器也可以有多个 有的DBMS按照触发器建立的时间顺序进行触发。 有的DBMS按照触发器名字顺序进行触发。 7.4.2 创建触发器 7.4.3 修改和删除触发器 语法为: ALTER TRIGGER triggerName ON tableName FOR { INSERT | UPDATE | DELETE } AS SQL-Statement 7.4.3 修改和删除触发器 [例7.32] 修改例7.31中的修改类型的触发器,只有修改了学生所属的班级时才触发,允许对多条修改记录进行操作。 分析: 触发条件是:只有修改了学生所属的班级时才触发。 在程序中使用语句“IF UPDATE(classNo)”来保证:如果仅修改了班级编号之外的属性,则不引发触发器工作。 本例允许对多条修改记录进行操作,必须使用游标。 找出修改前后的班级编号,分别放入到变量@oldClassNo和@newClassNo中; 对这两个班的人数分别进行减一和增一操作。 7.4.3 修改和删除触发器 要找出修改前后的班级编号,对inserted和deleted两张表进行连接操作,连接条件是学号相等,其连接语句为 SELECT a.classNo, b.classNo FROM inserted a, deleted b WHERE a.studentNo=b.studentNo inserted表中保存的是修改后的班级编号。 deleted表中保存的是修改前的班级编号。 7.4.3 修改和删除触发器 触发器程序为: ALTER TRIGGER classUpt ON Student FOR UPDATE AS IF UPDAT

您可能关注的文档

文档评论(0)

***** + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档