实验六 触发器(2012new)

更新时间:2023-10-13 16:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六 触发器

学号: 姓名: 专业: 班级:

一、实验目的

(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

1

触发器的触发执行测试结果:

(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 触发器的触发执行测试结果:

2

(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

触发器的触发执行测试结果:

3

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

触发器的触发执行测试结果:

4

(2)在Student表中插入一个getcredit字段(记录学生所获学分的情况),创建一个触发器ins_credit,当更改(注:含插入时)SC表中的学生成绩时,如果新成绩大于等于60分,则该生可获得这门课的学分,且该学分须与course表中的值一致;如果新成绩小于60分,则该生未能获得学分,修改值为0。

触发器的创建语句:create trigger ins_credit

on sc for update,insert

as declare @sno char(8),@cno char(3),@grade tinyint, @credit tinyint if update(grade) begin

select @grade=grade,@cno=cno,@sno=sno from inserted select if @grade>=60 begin

select @credit=credit from course where cno=@cno update student

set getcredit=@credit where sno=@sno end else

update student

set getcredit=@credit where sno=@sno

end

5

本文来源:https://www.bwwdw.com/article/bp4f.html

Top