首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储点到点距离的SQL函数

存储点到点距离的SQL函数
EN

Stack Overflow用户
提问于 2016-11-03 16:18:25
回答 1查看 90关注 0票数 0

我正在尝试创建一个SQL函数,它将根据我的距离表中的里程来存储从选定的点到另一个点的里程数。我不熟悉创建函数,但下面的代码是我迄今为止拼凑起来的:

代码语言:javascript
复制
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区域中的所有代码,它确实返回了正确的数据,我为变量放置了数据。

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 17:36:12

您的select (非常奇怪)可能返回许多行,其中有许多字段没有任何赋值,这意味着由select生成的结果集将由函数返回;这与函数的规范相矛盾,该函数被定义为返回单个十进制数@Miles。此外,用于返回值的变量从未被赋予任何值。

我建议您首先检查您的选择(我不太明白为什么会这样),然后确保在返回语句之前将一个单个十进制值分配给@Miles。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40406502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档