Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 查询以将特定地理距离内的行返回给给定行(使用sql server 2008)_Sql Server 2008_Distance_Geography - Fatal编程技术网

Sql server 2008 查询以将特定地理距离内的行返回给给定行(使用sql server 2008)

Sql server 2008 查询以将特定地理距离内的行返回给给定行(使用sql server 2008),sql-server-2008,distance,geography,Sql Server 2008,Distance,Geography,我有一个包含多条记录的表,每条记录都包含一个名为coords的字段。此字段已使用地理点更新 UPDATE testing SET [coords] = geography::Point(52.029736, -113.973541, 4326) WHERE id=2" 我需要做的是。。。当用户登录时,他们有一条属于自己的记录,例如,本例中的记录id为1。他们需要访问一个页面,该页面显示在一定距离内的所有其他记录的coords字段 这是我想出的最好的办法 首先,我能找到与这句话相协调的开头 SE

我有一个包含多条记录的表,每条记录都包含一个名为coords的字段。此字段已使用地理点更新

UPDATE testing SET [coords] = geography::Point(52.029736, -113.973541, 4326)
WHERE id=2"
我需要做的是。。。当用户登录时,他们有一条属于自己的记录,例如,本例中的记录id为1。他们需要访问一个页面,该页面显示在一定距离内的所有其他记录的coords字段

这是我想出的最好的办法

首先,我能找到与这句话相协调的开头

SELECT coords FROM testing WHERE id=1
这给了我原始坐标coords.Lat和coords.Long

然后我想找到附近的,所以我有这个

SELECT * FROM testing WHERE coords.STDistance() <=(20 * 1609.344)
我不知道如何将原始坐标放入第二个语句中以使其工作

我是否需要一个存储过程,或者我是否可以将coords.Lat/coords.Long放在STDistance的括号内?还是说我对这件事的期望太低了


仅供参考,我对sql server的经验很少,我从未做过任何高级工作,只做过简单的select*from表格,其中record=1和基本插入和更新

我自己用两个选择和两个变量解决了这个问题。。。有什么更好的建议吗

sql1 = "SELECT coords.Lat, coords.Long FROM testing WHERE id=1"
lat2 = rs(0)
lon2 = rs(1)
sql2 = "SELECT * FROM testing WHERE id <> 1 AND coords.STDistance(geography::Point(" & lat2 & ", " & lon2 & ", 4326)) <=(20 * 1609.344)"
'20 miles or less
这样行吗

SELECT
    [near].* 
FROM 
    testing [near]
INNER JOIN
    testing [user] ON
    [user].coords.STDistance( [near].coords ) < (20 * 1609.344)
WHERE
    [user].id = 1
这个怎么样

 DECLARE @g geography;
 SELECT @g = coords FROM testing WHERE id=1;        
 SELECT * FROM testing WHERE coords.STDistance(@g) <=(20 * 1609.344)

@德鲁:欢迎来到SO,请抽出几分钟阅读简单的降价文档。当您在左边空白处编辑或创建问题时,您可以阅读这些基础知识。