Рефакторинг SQL-скрипта - PullRequest
       1

Рефакторинг SQL-скрипта

1 голос
/ 24 февраля 2012

Я написал этот сценарий 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;  

но без везения.

Любой совет будет приветствоваться.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Не знаю географических особенностей sql 2008, но при просмотре вашего кода может сработать следующее:

SELECT
    Sites.*
FROM Sites
INNER JOIN Hydrants
    ON Hydrants.Location.STDistance(Sites.location) < Hydrants.Radius
WHERE Hydrants.HydrantId = 2 
ORDER BY Sites.SiteId ASC;
0 голосов
/ 24 февраля 2012

Я никогда не работал с типами географии, но это правильный синтаксис объединения, которое соответствует исходному запросу;

SELECT Sites.*
FROM Sites 
JOIN Hydrants 
  ON Hydrants.Location.STDistance(Sites.Location) < Hydrants.Radius  
WHERE Hydrants.HydrantId = 2 
ORDER BY Sites.SiteId ASC; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...