存储过程
来源:互联网 发布:电脑像素绘画软件 编辑:程序博客网 时间:2024/06/03 03:25
Create Procedure
编写存储过程 proc_avgage , 向客户端返回每个系的学生的平均年龄
create proc proc_avgageas select sdept,AVG(Sage) avg_age from Student group by Sdept
编写存储过程 proc_comp , 比较数据库和操作系统两门课程的平均分的高低,并输出: XXX课程的平均分高
数据库内没有这两门课,以计算机文化学课程与高等数学课程代替
create proc proc_compas 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_infoas select * from Student where Sno='1508100201'
分别执行上面的存储过程
Procedure w/ Parameters
修改 proc_comp,分别将两门课程的课程号作为输入参数,比较这两门课的平均分的高低,输出:
– XXX 课程的平均分高
alter proc proc_comp@cname1 nvarchar(20),@cname2 nvarchar(20)asif((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 outputas 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
Cursor
列出每个系的学生信息
首先列出一个系的系名
然后在该系名下列出本系学生的姓名和性别
直至列出全部系
declare @sdept nchar(20)declare @sdept1 nchar(20)declare @name nchar(5)declare @sex nchar(1)/*声明变量*/ declare cur_temp1 cursorstatic for select sdept from studentwhere sdept<>'cs' group by sdept/*声明游标*/declare cur_temp2 cursorstatic for select sname,ssex,sdept from studentwhere 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_temp1deallocate cur_temp2
阅读全文
0 0