2015-05-20 113 views
0

我尝试计算两个物体之间的距离。STDistance - 计算两个物体之间的距离

declare @p1 geography 
declare @p2 geography 
SELECT @p1 = WKT from tbl_1 where loc = "school" 
SELECT @p2 = WKT from tbl_2 where loc = "school" 
select round(@p1.STDistance(@p2)/1000,0) Distance_KM 

,但我得到一个错误的列loc

无效的列名

此列存在,并且数据类型为geography

WKT使用填充:

UPDATE [dbo].[lbl_1] 
SET [WKT] = geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326) 
GO 

有什么不对?

+0

你的意思是'loc'列的地理类型而不是'VARCHAR' – ughai

+0

也可以同时处理你的表'tbl_1'和'tbl_2'有一个'loc'列吗? – ughai

+0

学校是一个字符串还是一个列? sql服务器将其视为一个列,这就是为什么我认为你得到你的错误。试试这个'declare @ p1 geography select 1 WHERE @ p1 =“school”' – ughai

回答

2

您的字符串文字不正确。

对于SQL,您需要单引号,而不是'school'而不是"school"

SQL将它视为列而不是字符串文字。

+0

即使OP使用带有地理类型的字符串文字,它也不会起作用。^ – ughai

+0

@ughai:谁说'loc'属于地理类型?'WKT'是。 – leppie

+0

检查他的问题和他的评论 – ughai