web-dev-qa-db-fra.com

Comment insérer dans la variable TABLE?

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:)

1
Gour Gopal

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:

  1. Vous avez créé 4 colonnes avec NOT NULL comportements, mais votre insertion sur 2 colonnes seulement. Il renverra une erreur.

  2. Utilisation INSERT INTO au lieu de SELECT INTO. La table est déjà créée.

  3. Utilisation SELECT..FROM lors de l'appel de tables DECLARE.
10
Edgar Allan Bayron

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,

5
Evan Carroll