【发布时间】:2021-02-21 15:32:42
【问题描述】:
为什么这个程序不起作用?
CREATE PROCEDURE [dbo].[p_top5_v2_type_1km]
@IdCustomer int,
@idGroupVehicle int
AS
DECLARE @start geography
SET @start = (SELECT location FROM Customer
WHERE idCustomer = @idCustomer )
SELECT TOP 5
idVehicle, idGroupVehicle, brand, model, maxRange, weight, maxSpeed, nameLocation
FROM
Vehicle
WHERE
idGroupVehicle = @idGroupVehicle
AND @start.STDistance(locationVehicle) / 1000 <= 1
ORDER BY
@start.STDistance(locationVehicle) / 1000 ASC
GO
此程序应列出最近的前 5 辆车,类型车辆是 idGroupVehicle,但我收到此错误
消息 512,级别 16,状态 1,过程 p_top5_type,第 6 行 [批处理开始第 18 行]
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
谁能解释为什么这不起作用?
【问题讨论】:
-
错误信息的哪一部分你不明白?看起来很清楚。
-
我必须在这个查询中改变什么?
-
问题出在你的 子查询 ,正如错误告诉你的那样。显然,
idCustomer列在您的表Customet中不是唯一值。 -
OP 还需要添加一个
ORDER BY@MarkSchultheiss ,否则TOP 1不妨说“任意行”。 -
ORDER BY和TOP、@MarkSchultheiss 肯定在范围内。如果你要引入另一个缺陷,那么修复一个缺陷是没有意义的。
标签: sql sql-server procedure