我运行以下查询:
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
我得到了这个
Msg 512,Level 16,State 1,Line 1 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 0 :(得分:0)
当学生对同一个班级有多个成绩时,您需要指定该怎么做 - 这就是您所得到的错误。
这是一种可能性:
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()
将查询返回减少到一行,以避免出现特定问题。