【问题标题】:this returned more than 1 value这返回了超过 1 个值
【发布时间】:2018-05-22 13:46:48
【问题描述】:

我运行以下查询:

create function passs (@studentid nvarchar(50),@courseid nvarchar(50))
returns char
as
begin
declare @k char
if((select Grades.grade from Grades where Grades.Courses_id=@courseid AND 
Students_id=@studentid) >60)
set @k='pass'
else
set @k='no pass'
return @k
end

当我运行这个时:

select Grades.Courses_id,dbo.pass(Grades.Students_id,Grades.Courses_id) 
,Grades.Students_id,Grades.grade from Grades

我明白了

消息 512,第 16 级,状态 1,第 1 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

标签: sql-server tsql


【解决方案1】:

您需要指定当学生在同一班级有多个成绩时该怎么做——这就是您遇到的错误。

这是一种可能性:

create function passs (@studentid nvarchar(50), @courseid nvarchar(50))
    returns varchar(255)
as
begin
    declare @k varchar(255);

    select @k = (case when min(g.grade) > 60 then 'pass' else 'no pass' end)
    from grades g
    where g.Courses_id = @courseid 
      AND g.Students_id = @studentid

    return @k;
end;

注意事项:

  • 声明了返回字符串的长度 -- 您的值有多个字符。
  • 声明了@k的长度。
  • 将逻辑组合到一个查询中。
  • 使用min() 将查询返回减少到单行以避免您的特定问题。

【讨论】:

  • 我觉得应该是MAX(g.grade),如果第一次已经通过了,学生就不会再上同样的课程了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2012-08-23
  • 2013-05-23
相关资源
最近更新 更多