2010-02-12 5 views
3

J'ai une base de données SQL Server que j'ai migrée vers SQL Server 2008. Je souhaite tirer parti des fonctionnalités spatiales. Cependant, mes données utilisent des types de données plus traditionnels. Par exemple, j'ai les deux tableaux suivants:SQL Server 2008 - Interrogation de données spatiales

Location 
-------- 
ID char(36) 
Address nvarchar (256) 
City nvarchar (256) 
State char (2) 
PostalCode char (10) 

Order 
----- 
LocationID char(36) 
Product nvarchar(30) 
Quantity int 
TotalPrice decimal 

Comment puis-je utiliser les fonctions spatiales de SQL Server 2008 pour obtenir les commandes dans un rayon de 10 mile d'un code postal particulier?

Merci!

Répondre

3

Vous devez stocker la latitude et la longitude dans votre table Location, et vous devrez également avoir la latitude et la longitude de vos codes postaux. SQL Server peut uniquement fonctionner avec des coordonnées. Vous voudrez peut-être utiliser un service reverse geocoding pour obtenir les coordonnées de vos emplacements.

Dans tous les cas, voici comment votre requête géospatiale pourrait ressembler dans SQL Server 2008:

DECLARE @some_point geography; 
SET @some_point = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326); 

SELECT 
    Order.Product 
FROM 
    Order 
INNER JOIN 
    Location ON (Location.ID = Order.LocationID) 
WHERE 
    Location.Position.STDistance(@some_point) < 16093; 

qui précède suppose que votre table Location aurait un champ de type geography appelé Position.