存储过程

来源:互联网 发布:电脑像素绘画软件 编辑:程序博客网 时间: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

                      




原创粉丝点击