Je veux stocker 2 points de coordonnées (latitude, longitude) dans une variable de table.
J'ai essayé:
declare @coordinates table(latitude1 decimal(12,9),
longitude1 decimal(12,9),
latitude2 decimal(12,9),
longitude2 decimal(12,9))
select latitude,
longitude into @coordinates
from loc.locations
where place_name IN ('Delhi', 'Mumbai')
select @coordinates
Cela montre une erreur:
Msg 102, niveau 15, état 1, ligne 2 Syntaxe incorrecte près de '@coordinates'.
Le résultat de la requête de sélection:
select latitude,
longitude
from loc.locations
where place_name IN ('Delhi', 'Mumbai')
est:
latitude longitude
28.666670000 77.216670000
19.014410000 72.847940000
Comment puis-je stocker les valeurs dans le type de données de la table?
J'ai exécuté la requête SELECT @@VERSION
et a obtenu le résultat:
Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 29 avril 2016 23:23:58 Copyright (c) Microsoft Corporation Standard Edition (64 bits) sur Windows 10 Enterprise 6.3 (Build 16299:)
Utilisez celui-ci:
DECLARE @coordinates TABLE (
latitude1 DECIMAL(12,9),
longitude1 DECIMAL(12,9)
)
INSERT into @coordinates
SELECT
latitude,
longitude
FROM loc.locations
WHERE place_name IN ('Delhi', 'Mumbai');
SELECT * FROM @coordinates
Remarque:
Vous avez créé 4 colonnes avec NOT NULL
comportements, mais votre insertion sur 2 colonnes seulement. Il renverra une erreur.
Utilisation INSERT INTO
au lieu de SELECT INTO
. La table est déjà créée.
SELECT..FROM
lors de l'appel de tables DECLARE.Ce sont des coordonnées spatiales, vous devez donc les stocker avec un point de géographie spatiale
CREATE TABLE t (
pt1 geography,
pt2 geography
);
INSERT INTO t (pt1,pt2) VALUES
(
geography::Point(77.216670000, 28.666670000, 4326),
geography::Point(72.847940000, 19.014410000, 4326)
);
SELECT pt1.STAsText() AS pt1, pt1.STAsText() AS pt2
FROM t;
pt1 pt2
POINT (28.66667 77.21667) POINT (28.66667 77.21667)
Le troisième paramètre (4326) est l'identificateur de référence spatiale (SRID). "Le SRID correspond à un système de référence spatiale basé sur l'ellipsoïde spécifique utilisé pour ... la cartographie." SQL Server ne prend actuellement en charge que cette seule valeur.
Remarque, si elles sont direction c'est-à-dire, pt1-pt2 représente une route plane ou quelque chose, j'utiliserais plutôt un Line
,
Voir également,