* *
实 验 报 告
课程名称 数据库技术实践 实验项目 存储过程、触发器、用户自定义函数与游标 实验仪器 SQL Server 2008
系 别____计算机科学与技术系 _ 专 业____计算机科学与技术____ 班级/学号_______________________ 学生姓名 _______________________ 实验日期 ___ _______ 成 绩 _______________________
指导教师 ___ _______ _______
* *
[在内容说明部分请总体说明在本部分实践过程中,具体都完成了哪些内容]
一.内容说明
[请按照下面练习题的要求,完成各项内容,并说明每个题目完成的情况,是否存在问题,如何解决等]
二. 实验步骤与内容
如无特别说明,以下各题均利用之前建立的Students数据库以及Student、Course和SC表实现。
1. 创建满足下述要求的存储过程,并查看存储过程的执行结果。 (1) 查询每个学生的修课总学分,要求列出学生学号及总学分。
create proc SumCredit as
select sno 学号,sum(credit) 总学分 from sc join course c on
sc.cno=c.cno go
exec SumCredit
group by sno
* *
(2) 查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在
系作为输入参数,默认值为“计算机系”。执行此存储过程,并分别指定一些不同的输入参数值,查看执行结果。 create proc StudentInformation as
select sc.sno 学号,sname 姓名,sc.cno 课程号,cname 课程 @dept varchar(50)='计算机系',@sname char(50)
名,credit 学分
from Student s join SC on s.Sno=sc.Sno join Course c on
c.Cno = SC.Cno go
exec StudentInformation '信息管理系','吴宾'
where dept = @dept and Sname = @sname
exec StudentInformation @sname='李勇'
* *
(3) 查询指定系的男生人数,其中系为输入参数,人数为输出参数。
create proc Man_Num
@dept varchar(50),@rs int output as go
declare @rs int
exec Man_Num '信息管理系',@rs output select @rs as 人数
select @rs=COUNT(*) from Student where Dept=@dept and Sex='男'
(4) 查询考试平均成绩超过指定分值的学生学号和平均成绩。
create proc AvgGrade @grade int as go
select sno,AVG(grade) as '平均成绩' from SC group by Sno
having AVG(grade)>@grade
* *
exec AvgGrade 60
(5) 查询查询指定系的学生中,选课门数最多的学生的选课门数和平均成绩,
要求系为输入参数,选课门数和平均成绩用输出参数返回。 create proc Choose_Course
@dept varchar(50),@rs int output,@avg int output as
select top 1 @rs=COUNT(*) ,@avg=avg(grade) from Student
s join SC on s.Sno=sc.Sno join Course c on c.Cno = SC.Cno go
declare @rs int,@avg int
exec Choose_Course '信息管理系',@rs output,@avg output select @rs as 选课门数,@avg as 平均成绩
where dept=@dept group by sc.Sno
(6) 删除指定学生的修课记录,其中学号为输入参数。
create proc Del_Course @sno char(50)