实验九触发器的创建与使用
一、实验目的
本实验的目的是使学生进一步掌握SQL Server触发器的创建及使用方法,加深SQL触发器的理解。通过对数据的更新操作体会其触发器的作用。
二、实验准备
结合课堂教学内容,了解触发器的相关知识,掌握触发器的定义,理解触发器的使用方法及其特点。
三、实验要求
1. 掌握T-SQL创建触发器语句Create trigger的使用。 2. 完成所规定的触发器定义要求。 3. 通过数据查询检查触发器的使用效果。
4.注意操作结果的截图与保存,供撰写实验报告使用。 四、实验内容
1. 在班级表class中增加班级人数(c_total)字段。
alter table class add c_total int;
2. 为学生表(student)创建INSERT触发器t_inst_stu:新增一名学生时,若其班级编号非空,则将班级表(class)中相应班级的人数(c_total)自动加1。
例: create trigger t_inst_stu on student
for insert as begin
if exists(select*frominsertedwhereclsnoisnotnull) begin
update class set c_total=c_total+1
whereclsno=(selectclsnofrominserted); end end
3.为学生表(student)创建DELETE触发器t_dele_stu:删除一名学生时,若其班级编号非空,则将班级表(class)中相应班级的人数(c_total)自动减1。
4. 为学生表(student)创建UPDATE触发器t_update_stu:当某学生所在班号发生变化时(即调到另一班级后),将其原先所在班级的人数(c_total)减1,将新调入的班级班级的人数(c_total)加1。
5. 体会触发器的作用。
五、实验步骤
在查询分析器中完成实验内容。
1. 使用alter table语句在班级表class中增加班级人数(c_total)字段,默认值(DEFAULT)是0;对表中c_total字段的值进行修改。 2. 为学生表(student)分别创建:
? INSERT触发器t_inst_stu
create trigger t_inst_stu on student for insert as begin
if exists(select* from inserted where clsno is not null) begin
update class set c_total=c_total+1
where clsno = (select clsno from inserted); end end
? DELETE触发器t_dele_stu
? ? ? ? ? ? ? ? ?
create trigger t_dele_stu on student for delete as begin
if exists(select* from deleted where clsno is not null) begin
update class set c_total=c_total-1
where clsno = (select clsno from deleted); end
? end
? UPDATE触发器t_update_stu
? ? ? ? ? ? ? ?
create trigger t_update_stu on student for update as
if update(clsno) begin
update class set c_total=c_total-1 where clsno = (select clsno from deleted)
update class set c_total=c_total+1 where clsno = (select clsno from inserted)
? end
3. 体会触发器的作用: 1) 查看班级表(class)
2)对学生表(student)分别插入(INSERT)、删除(DELETE)和修改(UPDATE)元组
insert into student(sno,sname,ssex,clsNO,saddr,sage,height) values('00000012','李同学','男','000001','武汉','23','17.53');
delete student where sno='00000012';
update student set clsNO='000001' where sno='00000002';
3)再次查看班级表(class),检查其数据的变化情况,体会触发器的作用。
实验十 存储过程的创建与使用
一、实验目的
本实验的目的是使学生进一步掌握SQL Server存储过程的创建及使用方法,加深对SQL存储过程的理解。通过对存储过程的调用体会其作用。
二、实验准备
结合课堂教学内容,了解存储过程的相关知识,掌握存储过程的定义,理解存储过程的调用及其参数的使用方法。
三、实验要求
1. 掌握T-SQL创建触发器语句Create procedure的使用。 2. 完成所规定的存储过程定义要求。
3. 调用(EXEC)所创建的过程,检查过程的执行结果。 4.注意操作结果的截图与保存,供撰写实验报告使用。
四、实验内容
1、创建一个不带参数的存储过程p_stu_info1,实现对满足要求的学生基本信息的查询。
Create procedure p_stu_info1 as begin
select * from student where sage<24 and ssex='男';
end
exec p_stu_info1;
要求:所有年龄<24岁的男同学
2、创建一个存储过程p_stu_info3,根据输入的学号,查询某学生的基本信息。
Create procedure p_stu_info3 @findsno char(8) as begin
select * from student where sage = (select sage from student where sno = @findsno); end
exec p_stu_info3 '00000001';
要求:输入参数为学号,与指定学号的学生同龄的所有同学。
3、创建一个带有参数的存储过程p_stu_info2,实现对满足要求的学生基本信息的查询。
Create procedure p_stu_info2 @findsno char(8) as begin
select * from student where sno = @findsno; end
exec p_stu_info2 '00000001';
要求:输入参数为学号。
4.创建一个存储过程p_stu_grade,根据输入的学号,返回其选课及其成绩。
要求:输入参数为学号。
Create procedure p_stu_grade @findsno char(8) as begin
select cname,grade from course inner join sc on sc.cno=course.cno where sno = '00000002' ; end
exec p_stu_grade '00000002';
5.使用SQL语句分别执行p_stu_info1、p_stu_info2、p_stu_info3和p_stu_grade,并查看显示结果。
五、实验步骤
在查询分析器中完成实验内容。