Como retornar colunas adicionais com valores gerados em procedimentos armazenados na 'mosca'?
-
19-09-2019 - |
Pergunta
Eu tenho um procedimento armazenado no SQL 2005 que calcula a distância usando a fórmula de Haversine. Tudo funciona bem, mas eu gostaria de retornar a distância calculada com meu conjunto de resultados. Como faço para adicionar esse par de coluna/valor?
DECLARE @Longitude DECIMAL(18,8),
@Latitude DECIMAL(18,8),
@MinLongitude DECIMAL(18,8),
@MaxLongitude DECIMAL(18,8),
@MinLatitude DECIMAL(18,8),
@MaxLatitude DECIMAL(18,8),
@WithinMiles INT
Set @Latitude = -122.25336930
Set @Longitude = 37.50002600
Set @WithinMiles = 20
-- Calculate the Max Lat/Long
SELECT @MaxLongitude = dbo.LongitudePlusDistance(@Longitude, @Latitude, @WithinMiles),
@MaxLatitude = dbo.LatitudePlusDistance(@Latitude, @WithinMiles)
-- Calculate the min lat/long
SELECT @MinLatitude = 2 * @Latitude - @MaxLatitude,
@MinLongitude = 2 * @Longitude - @MaxLongitude
SELECT Top 10 *
FROM Location
WHERE LocationLongitude Between @MinLongitude And @MaxLongitude
And LocationLatitude Between @MinLatitude And @MaxLatitude
And dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude, LocationLatitude) <= @WithinMiles
ORDER BY dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude, LocationLatitude)
--Return the result of dbo.CalculateDistance
Algum indicador? Incluindo a maneira correta de fazer essa pergunta?
(Ah, e sim, este não é o procedimento armazenado, pois eu estava tocando com a consulta diretamente, foi o que eu colei aqui.)
Solução
Eu acho que é isso que você está pedindo
SELECT Top 10 *,dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude, LocationLatitude) as 'Calculated Distance'
FROM Location
WHERE LocationLongitude Between @MinLongitude And @MaxLongitude
And LocationLatitude Between @MinLatitude And @MaxLatitude
And dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude, LocationLatitude) <= @WithinMiles
ORDER BY dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude, LocationLatitude)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow