实验六 触发器(2012new).doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六 触发器(2012new)

实验六 触发器 学号: 姓名: 专业: 班级: 一、实验目的 (1)理解触发器的用途、类型和工作原理。 (2)掌握利用T-SQL语句创建和维护触发器的方法。 (3)掌握利用SQL Server Management Studio创建、维护触发器的方法。 二、实验内容 1.创建AFTER触发器 (1)创建一个在插入时触发的触发器sc_insert:当向sc表插入数据时,须确保插入的学号已在student表中存在,并且还须确保插入的课程号在course表中存在;若不存在,则给出相应的提示信息,并取消插入操作,提示信息要求指明插入信息是学号不满足条件还是课程号不满足条件。(注:student表与sc表的外键约束,course表与sc表的外键约束要先取消)。 触发器的创建语句:if exists (select name from sysobjects where name=sc_insert and type=tr) drop trigger sc_insert go create trigger sc_insert on sc for insert As declare @sno char(8),@cno char(3) Select @sno=sno,@cno=cno from inserted If not exists (select * from student where sno=@sno) Begin print not exist the student If not exists (select * from course where cno=@cno) print not exist the course Rollback tran End else if not exists (select * from course where cno=@cno) begin Rollback tran print not exist the course end go 触发器的触发执行测试结果: (2)为course表创建一个触发器course_del,当删除了course表中的一条课程信息时,同时将表sc表中相应的学生选课记录也一并删除。 触发器的创建语句:create trigger course_del on course for delete As declare @cno char(3) Select @cno=cno from deleted Delete from sc where cno=@cno 触发器的触发执行测试结果: (3)在course表中添加一个平均成绩avg_grade字段(记录每门课程的平均成绩),创建一个触发器grade_modify,当SC表中的某学生的成绩发生变化时,则course表中的平均成绩也能及时相应发生改变。 触发器的创建语句:create trigger grade_modify on sc for update as if update(grade) begin update course set avg_grade=(select avg(grade) from sc where course.cno=sc.cno group by cno) end 触发器的触发执行测试结果: 2.创建INSTEAD OF触发器 (1)创建一视图student_view,包含学号、姓名、课程号、课程名、成绩等属性,在student_view上创建一个触发器grade_moidfy,当对student_view中的学生的成绩进行修改时,实际修改的是sc中的相应记录。 触发器的创建语句:create trigger grade_moidfy on student_view instead of insert as declare @grade tinyint,@sno char(8),@cno char(3) if update(grade) begin select @grade=grade,@sno=sno,@cno=cno from inserted update sc set grade=@grade where sno=@sno and cno=@cno end 触发器的触发执行测试结果: (2)在Student表中插入一个getcredit字段(记录学生所获学分的情况),创建一个触发器ins_credit,当更改(注:含插入时)SC表中的学生成绩时,如果新成绩大于等于60分,则该生可获得这门课的学分,且该学分须与course表中的值一致;如果新成绩小于60分,则该生未能获得学分,修改值为0。 触发

文档评论(0)

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

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

1亿VIP精品文档

相关文档