2008-11-25 8 views
1

Je suis assez sûr que ce n'est pas la bonne façon de le faire, donc je suis à la recherche de suggestions.Utilisation de variables dans SQL 2008 pour renvoyer plusieurs enregistrements

Je ne pense pas que mon problème soit si important que j'essaie de résoudre un problème spatial. Je ne suis pas sûr d'un bon moyen de prendre la latitude et la longitude et retourner un type de données géographiques dans une déclaration select. J'ai réussi à créer une colonne géographique et à saisir les données.

Use thedatabase; 
GO 
Declare @Lat numeric(11,6) 
Declare @Long numeric(11,6) 
DECLARE @g geometry; 




Select @Lat = Latitude, @Long = Longitude 
from dbo.thetable 

set @g = geometry::STGeomFromText('POINT (' + Cast(@Lat as varchar(30)) + ' ' + CAST(@Long as varchar(30)) + ')', 0); 


select @g 

Répondre

1

Pouvez-vous clarifier ce que vous voulez faire?

Si la question portait sur l'utilisation du texte - si je comprends bien, le format WKT est assez normal ici, donc pas un problème.

Si vous souhaitez renvoyer des valeurs de géométrie multiples, quelque chose comme:

SELECT geometry::STGeomFromText('POINT (' + CAST(Latitude as varchar(30)) 
    + ' ' + CAST(Longitude as varchar(30)) + ')', 0) 
FROM dbo.thetable 

Si vous voulez travailler avec plusieurs géométries, déclarer une variable de table et insérer les résultats d'une telle requête:

DECLARE @data TABLE (location geometry) 
INSERT @data (location) 
SELECT geometry::STGeomFromText('POINT (' + CAST(Latitude as varchar(30)) 
    + ' ' + CAST(Longitude as varchar(30)) + ')', 0) 
FROM dbo.thetable 

et de travailler avec @data comme un ensemble de données

1

Le type de géométrie doit être utilisé uniquement pour les données projetées. Puisque vous avez déjà des données lat/long non projetées, vous devez utiliser le type Géographie à la place. En outre, il existe une méthode statique pour créer des points:

SELECT geography::Point(t.lat, t.lon, 0) FROM yourtable t 
Questions connexes