类似与C语言中的函数。
编写一个存储过程,在sc表统计每个学生的平均分.
create proc avergrade as begin
//创建存储过程
select sno,avg(grade) 平均分 from sc group by sno end
exec avergrade
drop procedure avergrade
//执行存储过程
//删除存储过程
对练习1的存储过程进行改进,添加一个输入参数——学号,使存储过程能根据输入的学号计算该学生的平均分
create proc avergrade @sno char(10) as begin
select sno,avg(grade) 平均分 from sc
where sno = @sno group by sno end
exec avergrade '04'
drop procedure avergrade
在练习2的基础上添加一个输出参数——平均分,计算指定学号的平均分,然后将平均分输出。
create proc avergrade @sno char(10), @saving int out as begin
select @saving = avg(grade) from sc
where sno = @sno group by sno end
declare @avg int set @avg = 0
exec avergrade '02',@avg out select @avg 平均分
drop procedure avergrade
3.函数。
函数必须返回指定类型,可以返回表,有输入参数。
创建成绩转换函数,实现百分制成绩与优、良、中、及格、不及格五个等级的换算.
CREATE FUNCTION grade_trans(@grade FLOAT) RETURNS CHAR(16) AS BEGIN
DECLARE @class CHAR(16) SELECT @class = CASE
WHEN @grade IS NULL THEN '还没参加考试' WHEN @grade < 60 THEN '不及格'
WHEN @grade >= 60 and @grade < 70 THEN '及格' WHEN @grade >= 70 and @grade < 80 THEN '中等' WHEN @grade >= 80 and @grade < 90 THEN '良好' ELSE '优秀!' END
RETURN(@class) END
select dbo.grade_trans(88)
查询某个院系所有学生所选的每门课的平均成绩。
create function aver (@p char(10)) returns table as return (
select cno 课程号,avg(grade) 平均成绩
from student,sc
where student.sno=sc.sno and sdept=@p
group by cno )
select * from dbo.aver('cs')
drop function aver
求某个院系选修了某门课的学生人数。
create function people(@p0 char(10),@p1 char(4)) returns int as begin
declare @renshu int select @renshu = ( )
return @renshu
select COUNT(*) 选课人数 from student,sc
where student.sno = sc.sno and cno = @p1 and sdept = @p0
end
select dbo.people('cs','2')