Динамический столбец в предложении where - PullRequest
2 голосов
/ 07 июня 2011

Я пытаюсь выполнить запрос следующим образом:

SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests
WHERE Distance < 2
ORDER BY Distance DESC

Ошибка говорит, что нет столбца Расстояние. Я пробовал это один раз, но это снижает производительность запросов

SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests
WHERE dbo.CalculateDistance(Lat,Lon,@lat,@lon) < 2
--ORDER BY Distance DESC

Как не выполнить второй расчет, как мне выполнить вышеуказанный запрос?
С наилучшими пожеланиями
Myra

1 Ответ

3 голосов
/ 07 июня 2011

Я нашел ссылку ниже, предлагающую сделать вложенный выбор и отфильтровать его значения;в этом случае скалярное вычисление будет выполнено только один раз.

Так что вы должны быть в состоянии сделать что-то вроде

        SELECT Id, Name, Distance FROM (
        SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
        FROM Requests) derived 
        WHERE Distance < 2 
        ORDER BY Distance DESC 

Я кратко рассмотрел план выполнения, и скалярное вычисление происходит только один раз.Но вы, безусловно, должны проверить использование индексов и т. Д.

Я надеюсь, что это поможет вам.

Избегайте ограничений псевдонимов столбцов Transact-SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...