sql-server - 这返回了超过 1 个值
问题描述
我运行以下查询:
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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
解决方案
您需要指定当学生在同一班级有多个成绩时该怎么做 - 这就是您遇到的错误。
这是一种可能性:
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()
减少查询返回到单行以避免您的特定问题。
推荐阅读
- javascript - 使用不同类型的对象Angular从数组中过滤数据
- elasticsearch - 即使在成功连接后也向 APM 发送数据时出错
- php - 在 WooCommerce 中禁用基于自定义运输方式的付款方式
- python - 如何将 Django 中的 SQL 数据库驱动程序从 mysqlclient 更改为 PyMySQL?
- python - 如果 a < b 则重构:a = b
- python - 我试图在 discord.py 中创建一个平衡命令,但它没有工作并给出了意外的错误
- c# - 通过加速和减速平稳地旋转四元数。相当于四元数的最大值/最小值?
- javascript - 在不取消控制的情况下刷新传单路线
- python - 尝试安装 PyQT5 时,Pip Install 卡在“Preparing Wheel metadata...”上
- c# - 如何使用 C# 使用 Snip 和草图进行屏幕捕获?