存储过程

Create Procedure

编写存储过程 proc_avgage , 向客户端返回每个系的学生的平均年龄

create proc proc_avgage
as
    select sdept,AVG(Sage) avg_age
    from Student
    group by Sdept

存储过程_第1张图片       存储过程_第2张图片


编写存储过程 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'高等数学课程的平均分高'

存储过程_第3张图片

创建存储过程 proc_student_info,用于检索你本人的学生数据

create proc proc_student_info
as
    select *
    from Student
    where Sno='1508100201'
存储过程_第4张图片  存储过程_第5张图片


分别执行上面的存储过程

 

Procedure w/ Parameters

修改 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+'课程的平均分高'
存储过程_第6张图片

存储过程_第7张图片

修改 proc_student_info ,使之可检索指定学号的学生数据,执行上面的存储过程,输入参数为你本人的学号

alter proc proc_student_info
@sno varchar(20)
as
    select *
    from Student
    where Sno=@sno
存储过程_第8张图片               存储过程_第9张图片

创建存储过程 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

 存储过程_第10张图片

由于本人所有成绩为空,没有任何输出,故用其他同学代替

 存储过程_第11张图片

修改上面的存储过程,根据平均成绩填写评语,如果平均分>60,评语为“合格”,否则评语为“不合格”,将评语写入Student表的comment列当中

 – 调用上述存储过程,为你自己的学号添加评语

– 提示:先对Student表添加“评语(comment)” 列

存储过程_第12张图片

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
存储过程_第13张图片        存储过程_第14张图片

  存储过程_第15张图片

Cursor

列出每个系的学生信息

首先列出一个系的系名

然后在该系名下列出本系学生的姓名和性别

直至列出全部系

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

                      存储过程_第16张图片




你可能感兴趣的:(数据库,数据库,存储过程,SQL,server)