实验七 存储过程与触发器
(实验报告)
一、 目的
1.掌握存储过程和触发器的基本概念和功能。
2.掌握创建、管理存储过程的方法。
3.掌握创建、管理触发器的方法。
二、 实验内容
(1)完成下列操作
利用SQL Server Management Studio创建一个查询过程ProNum,查询每个班级中学生的人数,按班级号升序排列。
1.
2.利用Transact-SQL语句创建一个带有参数的存储过程ProInsert,向score表插入一条选课记录,并查询该学生的姓名、选修的所有课程名称、平时成绩和期末成绩。
3.利用Transact-SQL语句创建一个存储过程ProAvg,查询指定班级指定课程的平均分。班级号和课程名称由输入参数给定,计算出的平均分通过输出参数返回。若该存储过程存在,则删除后重建。
4.利用SQL Server Management Studio创建一个AFTER触发器trigsex,当插入或修改student表中性别字段sex时,检查数据是否只为‘男’或‘女’。
5.利用Transact-SQL语句创建一个AFTER数据库trigforeign,当向score表中插入或修改记录时,如果插入或修改的数据与student表中数据部匹配,即没有对应的学号存在,则将此记录删除。
6.利用Transact-SQL语句创建一个AFTER触发器trigclassname,当向class表中插入或修改数据时,如果出现班级名称重复则回滚事务。若该触发器存在,则删除后重建。
(2)完成实验报告
三、 实验环境
SQL2005。
四、 实验原理
1.理解存储过程。
2.掌握触发器的使用。
五、 实验报告
将实验内容作为实验报告完成。
六、 实验小结
第二篇:实验六 视图、存储过程和触发器 实验报告
实验六 视图、存储过程和触发器
实验内容1
建立视图
实现代码
create view 学生成绩
as
select sc.snum,sections.cnum,course.cname,sc.score
from sc,sections,course
where sc.secnum = sections.secnum and sections.cnum = course.cnum
运行界面
数据查询
实现代码
select distinct cname from 学生成绩
where cname not in (select cname from 学生成绩where score < 60)
运行界面
实验内容2
建立存储过程1
实现代码
create procedure 学生信息;1
as select * from student
运行界面
建立存储过程2
实现代码
create procedure学生信息;2
@_birthyear int
as
select * from student
where year(birthday)=@_birthyear
运行界面
实验内容3
建立触发器1
实现代码
create trigger学号约束 on sc
for insert,update
as
begin
if((select snum from inserted ins)not in (select snum from student))
begin
print'违反参照完整性约束'
rollback
end
end
建立触发器2
CREATE trigger sections_delete
on sections
for delete
as
declare @_secnum char(8)
select @_secnum = d.secnum from deleted d
if not exists (select * from sc where secnum = @_secnum)
begin
print '已删除没有被选的课程班级'
commit tran
end
else
begin
delete from sc where secnum = @_secnum
end