dsdfsdfzs 2019-04-29 14:49 采纳率: 0%
浏览 376
已采纳

两道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条回答

  • James hug 2019-04-29 15:07
    关注

    else if @c>1 set @avgg= '-2';

    變更為else if @c>1
    set @avgg=-2

    select sname,classname , avg (grade) from student a join course b on a.sname=b.cname
    where a.sname in (@select_study_name)
    group by sname,classname

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案