2009-10-01 26 views
0

C'est une de ces questions où j'ai de la difficulté à trouver comment le demander aussi nu avec moi.Comment renvoyer des colonnes supplémentaires avec des valeurs générées dans des procédures stockées?

J'ai une procédure stockée dans SQL 2005 qui calcule la distance en utilisant la formule de Haversine. Tout fonctionne très bien, mais je voudrais retourner la distance calculée avec mon jeu de résultats. Comment puis-je ajouter cette paire colonne/valeur?

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 

Des pointeurs? Y compris la bonne façon de poser cette question?

(Oh, et oui, ce n'est pas la procédure stockée depuis que je joue avec la requête directement c'est ce que je collais ici.)

Répondre

1

Je pense que c'est ce que vous demandez

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) 
+0

Brillant! C'est exactement ce que je cherchais. Y a-t-il un nom technique pour cela? – Mikecancook

+0

Non que je ne sache pas, vous pouvez ajouter des littéraux ou des variables à votre liste de sélection tout ce que vous voulez que la chaîne 'Distance calculée' s'appelle un allias – Gratzy