我正在尝试创建一个SQL函数,它将根据我的距离表中的里程来存储从选定的点到另一个点的里程数。我不熟悉创建函数,但下面的代码是我迄今为止拼凑起来的:
CREATE FUNCTION dbo.GetMiles(@StartLoc VARCHAR, @DestLoc VARCHAR)
RETURNS DECIMAL
AS BEGIN
DECLARE @Miles DECIMAL
SELECT *
FROM
(
SELECT *
FROM (
SELECT Loc1, Loc2, Miles
FROM Distance
UNION ALL
SELECT Loc2, Loc1, Miles
FROM Distance
) AS t1
)
t1
WHERE Loc1 = @StartLoc
INTERSECT
SELECT *
FROM
(
SELECT Loc1, Loc2, Miles
FROM Distance
UNION ALL
SELECT Loc2, Loc1, Miles
FROM Distance
) AS t2
WHERE Loc2 = @DestLoc
RETURN @Miles
END当我运行代码时,会收到以下错误消息:
Msg 444,16级,状态2,过程GetMiles,第7行批开始行0
函数中包含的Select语句不能将数据返回给客户端。
有人能帮我处理代码吗?这样我就可以得到@Miles结果,这样我就可以引用结果并为用户记录存储另一个表了吗?
顺便说一句,我已经测试了SELECT区域中的所有代码,它确实返回了正确的数据,我为变量放置了数据。
发布于 2016-11-03 17:36:12
您的select (非常奇怪)可能返回许多行,其中有许多字段没有任何赋值,这意味着由select生成的结果集将由函数返回;这与函数的规范相矛盾,该函数被定义为返回单个十进制数@Miles。此外,用于返回值的变量从未被赋予任何值。
我建议您首先检查您的选择(我不太明白为什么会这样),然后确保在返回语句之前将一个单个十进制值分配给@Miles。
https://stackoverflow.com/questions/40406502
复制相似问题