это вернуло более 1 значение - PullRequest
0 голосов
/ 22 мая 2018

Я запускаю следующий запрос:

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,Уровень 16, состояние 1, строка 1 Подзапрос вернул более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

1 Ответ

0 голосов
/ 22 мая 2018

Вы должны указать, что делать, если у ученика более одного класса для одного класса - это ошибка, которую вы получаете.

Вот одна из возможностей:

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(), чтобы уменьшить возврат запроса до одной строки, чтобы избежать вашей конкретной проблемы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...