weixin_42251360
dsdfsdfzs
2019-04-29 14:49

两道sql创建函数与存储过程的问题

5
  • sql

1.创建函数float sf_getAverageGrade(@sname nchar(10))。
如果没有学生叫做@sname,函数返回-1; 如果有多名学生叫做@sname,则返回-2; 如果他/她具有至少一门课程,则返回学生姓氏的平均成绩; 如果学生@sname没有课程成绩,则返回null。
参数@sname等于'李少西'时显示函数结果。

2.创建存储过程sp_displayGradeInRow(@sname nchar(10))。
存储过程显示两行信息:“姓名”一行,由@sname和“平均成绩”选择的所有课程名称,@sname的另一行,成绩和平均成绩。 (使用光标获取课程名称和成绩)
参数@sname等于'李少西'时显示存储过程结果

第一问:

create function sf_getAverageGrade(@sname nchar(10))
returns real
as
begin
DECLARE @sno nchar(10);
DECLARE @cname nchar(15);
DECLARE @grade real;
declare @avgg real;
declare @c int;
declare @d int;
set @c = (SELECT count(*)  FROM student WHERE sname=@sname)
set @d = (select count(*)  from course where cname=@cname)
if @d=0 set @avgg='null'
else if @c>0 set @avgg=(select avg(grade) from sc where sno=@sno);
else if @c>1  set @avgg= '-2';
set @avgg ='-1';
return @avgg;
end;

报错:从数据类型 varchar 转换为 real 时出错。
以及第二问
求助qwq感谢!!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答

为你推荐

换一换