SQL server之存储过程练习

 对应于student数据库

(1)  创建一个无参存储过程StuScoreInfo,查询以下信息:学号,姓名,性别,课程名称,考试成绩.

use Student

go

create proc StuScoreInfo

as select student.sno,sname,ssex,cname,sc.gradefrom student,course,sc

wherestudent.sno=sc.sno and course.cno=sc.cno

 

go

exec StuScoreInfo

(2)  创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的信息.

CREATE PROCstu_info

@NAME VARCHAR(20)

AS

SELECT *

FROM Student

WHERE Sname=@NAME

GO

 

EXEC stu_info '李勇'

(3)  创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生编号和课程名称查询以下信息:姓名,课程名称,考试成绩.

 

CREATE PROCStuScoreInfo2

@NAME1VARCHAR(20),

@NAME2VARCHAR(20)

AS

SELECTsname,cname,grade

FROMstudent,course,sc

WHEREstudent.sno=sc.sno and course.cno=sc.cno and  student.sno=@NAME1 andcourse.cname=@NAME2

 

GO

EXECStuScoreInfo2 '201215121','数据库'

(4)  编写带参数的存储过程,根据传入的课程名称统计该课程的平均成绩.

create procTheAvg

@NAME VARCHAR(20)

as

select AVG(Grade)平均值 from Course,SC

wheresc.Cno=Course.cno and Course.Cname=@NAME

 

go

exec TheAvg '数学'

(5)   查询选了某门课的选课人数(使用输出参数)

create proc TheNum

@course varchar(20) output,

@num int output

as

select @course=Cname,@num=count(*) from Course,SC

where sc.Cno=Course.cno 

group by Cname

 

go

 

declare @name char(20),@num char(20)

exec TheNum  @name output,@numoutput

select @name ,@num

(6)   根据各种错误设置不同的返回代码值。查询指定学号的学生的考试平均成绩,1,执行成功,0,未指定学号,2指定的学号不存在,3指定的学号没有选课。

create proc TheOver(@sno varchar(20))

as

  

 if not exists(select * fromStudent where Sno =@sno)

begin

         print '2指定的学号不存在'

end 

 else if not exists(select *from Student where @sno not in(select Sno from Course))

begin

         print '3指定的学号没有选课'

end 

 else if exists(select * fromSC where Sno=@sno)

begin

         select AVG(Grade) 平均值 from SC where Sno=@sno

         print '1执行成功了'

end

      

 else

begin

         print '0未指定学号'

end

go

exec TheOver '200215121'  

 


  • 17
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值