赞
踩
Create Procedure
编写存储过程 proc_avgage , 向客户端返回每个系的学生的平均年龄
- create proc proc_avgage
- as
- select sdept,AVG(Sage) avg_age
- from Student
- group by Sdept
编写存储过程 proc_comp , 比较数据库和操作系统两门课程的平均分的高低,并输出: XXX课程的平均分高
数据库内没有这两门课,以计算机文化学课程与高等数学课程代替
- create proc proc_comp
- as
- if((select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
- where Cname='计算机文化学'
- group by TSC.Cno)>(select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
- where Cname='高等数学'
- group by TSC.Cno))
- print'计算机文化学课程的平均分高'
- else
- print'高等数学课程的平均分高'
创建存储过程 proc_student_info,用于检索你本人的学生数据
- create proc proc_student_info
- as
- select *
- from Student
- where Sno='1508100201'
分别执行上面的存储过程
修改 proc_comp,分别将两门课程的课程号作为输入参数,比较这两门课的平均分的高低,输出:
– XXX 课程的平均分高
- alter proc proc_comp
- @cname1 nvarchar(20),@cname2 nvarchar(20)
- as
- if((select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
- where Cname=@cname1
- group by TSC.Cno)>(select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
- where Cname=@cname2
- group by TSC.Cno))
- print @cname1+'课程的平均分高'
- else
- print @cname2+'课程的平均分高'
修改 proc_student_info ,使之可检索指定学号的学生数据,执行上面的存储过程,输入参数为你本人的学号
- alter proc proc_student_info
- @sno varchar(20)
- as
- select *
- from Student
- where Sno=@sno
创建存储过程 proc_student_avg,计算指定学生(学号)平均成绩,并将该平均成绩通过参数输出
– 执行该存储过程,输入参数为你本人的学号
- create proc proc_student_avg
- @sno varchar(20),@avg_grade float output
- as
- select @avg_grade=AVG(grade)
- from TSC
- where Sno=@sno
- group by Sno
由于本人所有成绩为空,没有任何输出,故用其他同学代替
修改上面的存储过程,根据平均成绩填写评语,如果平均分>60,评语为“合格”,否则评语为“不合格”,将评语写入Student表的comment列当中
– 调用上述存储过程,为你自己的学号添加评语
– 提示:先对Student表添加“评语(comment)” 列
- alter proc proc_student_avg
- @sno varchar(20)
- as
-
- if((select AVG(grade)
- from TSC
- where Sno=@sno
- group by Sno)>=60)
-
- update Student
- set comment='及格'
- where Sno=@sno
- else
- update Student
- set comment='不及格'
- where Sno=@sno

列出每个系的学生信息
首先列出一个系的系名
然后在该系名下列出本系学生的姓名和性别
直至列出全部系
- declare @sdept nchar(20)
- declare @sdept1 nchar(20)
- declare @name nchar(5)
- declare @sex nchar(1)/*声明变量*/
-
- declare cur_temp1 cursor
- static for select sdept from student
- where sdept<>'cs' group by sdept/*声明游标*/
- declare cur_temp2 cursor
- static for select sname,ssex,sdept from student
- where sdept<>'cs' /*游标*/
-
- open cur_temp1 --打开游标
- FETCH NEXT FROM cur_temp1 INTO @sdept1 --取出游标值
- while @@FETCH_STATUS=0
- begin
- print @sdept1
- print '姓名 '+'性别'
-
- open cur_temp2 --打开游标
- FETCH NEXT FROM cur_temp2 INTO @name,@sex,@sdept --取出游标值
- while @@FETCH_STATUS=0
- begin
- if(@sdept1=@sdept)
- begin
- print @name+' '+@sex
- end
- FETCH NEXT FROM cur_temp2 INTO @name,@sex,@sdept --循环取出游标的值
- end
- print' '
- close cur_temp2 --关闭游标
- FETCH NEXT FROM cur_temp1 INTO @sdept1 --循环取出游标的值
- end
-
- --关闭游标
- close cur_temp1
- --释放游标
- deallocate cur_temp1
- deallocate cur_temp2

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。