我已经编写了这个SQL脚本:
DECLARE @location geography
DECLARE @radius int
SET @location = (SELECT Location FROM Hydrants WHERE HydrantId = 2)
SET @radius = (SELECT Radius FROM Hydrants WHERE HydrantId = 2)
SELECT *
FROM Sites
WHERE @location.STDistance(location) < @radius
ORDER BY SiteId ASC 我这样做是为了重构它。
SELECT *
FROM Sites, Hydrants
Inner Join Hydrants.Location.STDistance(Sites.Location) < Hydrants.Radius
WHERE Hydrants.HydrantId = 2
ORDER BY Sites.SiteId ASC; 但是没有运气。
任何建议都将受到欢迎。
发布于 2012-02-24 04:44:07
我不知道SQL2008的地理特性,但当看到您的代码时,以下内容可能会起作用:
SELECT
Sites.*
FROM Sites
INNER JOIN Hydrants
ON Hydrants.Location.STDistance(Sites.location) < Hydrants.Radius
WHERE Hydrants.HydrantId = 2
ORDER BY Sites.SiteId ASC;发布于 2012-02-24 04:43:29
我从来没有使用过地理类型,但这是连接的正确语法,它的作用与原始查询相同;
SELECT Sites.*
FROM Sites
JOIN Hydrants
ON Hydrants.Location.STDistance(Sites.Location) < Hydrants.Radius
WHERE Hydrants.HydrantId = 2
ORDER BY Sites.SiteId ASC; https://stackoverflow.com/questions/9420628
复制相似问题