415 votes

SELECT INTO une variable de table dans T-SQL

A obtenu une requête sélection complexe, à partir de laquelle je voudrais insérer toutes les lignes dans une variable de table, mais T-SQL ne le permettrait pas.

Dans le même esprit, vous ne pouvez pas utiliser une variable de table avec SELECT ou INSERT EXEC requêtes. http://odetocode.com/Articles/365.aspx

Petit exemple:

declare @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
)

SELECT name, location INTO @userData FROM myTable
INNER JOIN otherTable ON ...
WHERE age>30

Les données dans la variable de table sera plus tard utilisé pour insérer/mettre à jour de nouveau dans les différentes tables (surtout des copies des mêmes données avec les mises à jour mineures). Le but de ce serait tout simplement de rendre le script un peu plus lisible et plus facilement personnalisable que de faire le SELECT INTO directement dans les tables de droite. La Performance n'est pas un problème, tant que le nombre de lignes est assez petite et il est seulement exécuter manuellement en cas de besoin. ...ou tout simplement me dire si je suis en train de faire à tort et à travers.

654voto

Parkyprg Points 8286

Essayez quelque chose comme ceci:

 DECLARE @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
);
INSERT INTO @userData
SELECT name, location FROM myTable
INNER JOIN otherTable ON ...
WHERE age>30;
 

102voto

AakashM Points 32891

Le but de l' SELECT INTO est (pour les docs, mon accent)

Pour créer une nouvelle table à partir des valeurs d'une autre table

Mais déjà vous avez une table cible! Donc, ce que vous voulez, c'est

L' INSERT ajout d'une ou de plusieurs nouvelles lignes à une table

Vous pouvez spécifier les valeurs de données dans le une des manières suivantes:

...

À l'aide d'un SELECT sous-requête pour spécifier les valeurs de données pour une ou plusieurs lignes, tels que:

  INSERT INTO MyTable 
 (PriKey, Description)
        SELECT ForeignKey, Description
        FROM SomeView

Et dans cette syntaxe, il est permis de MyTable à être une variable de table.

16voto

Mulki Points 1964

Pourquoi n'utilisez-vous pas les tables temporaires ...

 SELECT name, location INTO #userData FROM myTable
INNER JOIN otherTable ON ...
WHERE age>30
 

Vous n'êtes pas obligé de déclarer la table de cette façon

La compréhension de quelle table ou variable à utiliser aide vraiment ..

9voto

Noel Abrahams Points 3678

Essayez d'utiliser INSERT au lieu de SELECT INTO :

 INSERT @UserData   
SELECT name, location etc.
 

3voto

Mehran Points 11
  • En utilisant la variable de table:

    declare @userData TABLE( name varchar(30) NOT NULL, oldlocation varchar(30) NOT NULL )

    insert INTO @userData select name, oldlocation FROM myTable INNER JOIN otherTable ON ... WHERE age>30


    • OU utilisez des tables temporaires:

      SELECT name, location INTO #userData FROM myTable INNER JOIN otherTable ON ... WHERE age>30

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X