我正在尝试创建一个SQL函数,该函数将根据Distance表中的里程数将选定点的里程数存储到另一个点。我不熟悉创建函数,但下面的代码是我到目前为止拼凑的代码:
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,Level 16,State 2,Procedure GetMiles,Line 7 [Batch Start Line 0]
有人可以帮助我使用代码,以便我可以获得@Miles结果,这样我就可以引用结果并将其存储为另一个用户记录表吗?
顺便说一句,我已经测试了SELECT区域中的所有代码,它确实返回了正确的数据,并为变量提供了数据。
答案 0 :(得分:1)
你的(很奇怪)选择可能返回许多具有许多字段的行而没有任何赋值,这意味着select生成的结果集将由函数返回;这与函数的规范相矛盾,该函数被定义为返回单个十进制数@Miles
。除此之外,用于返回值的变量从未给出任何值。
我建议您首先查看您的选择(我不太明白为什么会这样),然后确保在return语句之前为@Miles分配单个十进制值。