134 votes

Insérer toutes les valeurs d'une table dans une autre table en SQL

J'essaie d'insérer toutes les valeurs d'une table dans une autre. L'instruction d'insertion accepte des valeurs, mais j'aimerais qu'elle accepte un select * de la table initiale. Cela est-il possible ?

269voto

Matt Hamilton Points 98268

L'instruction d'insertion dispose en fait d'une syntaxe pour ce faire. C'est beaucoup plus facile si vous spécifiez les noms des colonnes plutôt que de sélectionner "*" :

INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...

Je ferais mieux de clarifier ce point car, pour une raison quelconque, ce message reçoit quelques votes négatifs.

La syntaxe INSERT INTO ... SELECT FROM est utilisée lorsque la table dans laquelle vous effectuez l'insertion ("new_table" dans mon exemple ci-dessus) existe déjà. Comme d'autres l'ont dit, la syntaxe SELECT ... INTO est utilisée lorsque vous souhaitez créer la nouvelle table dans le cadre de la commande.

Vous n'avez pas précisé si la nouvelle table doit être créée dans le cadre de la commande, donc INSERT INTO .... SELECT FROM devrait convenir si votre table de destination existe déjà.

3 votes

Qu ? Quelqu'un veut bien me laisser un commentaire expliquant pourquoi ce post génère des votes négatifs ? Je ne vois rien dans la question de l'OP qui spécifie que la nouvelle table doit être créée dans le cadre de la requête.

0 votes

Comment cela gère-t-il les violations de contraintes d'intégrité ? Par exemple, si un élément unique est dupliqué, la requête est-elle arrêtée ou simplement ignorée ?

0 votes

Je pense qu'il y aura une erreur et que la transaction sera annulée, ce qui signifie que rien ne sera copié. Cela vaut la peine de tester.

26voto

FibreCode Points 31

Essayez ça :

INSERT INTO newTable SELECT * FROM initial_Table

2 votes

Ne fonctionne pas lorsque l'on utilise des étoiles alors que nous avons une colonne d'identité.

0 votes

Pour ce scénario avec identité, ajoutez SET IDENTITY_INSERT nom_table ON en premier et la même chose avec off à la fin pour insérer les valeurs d'identité.

13voto

sornalingam Points 61

Vous pouvez insérer en utilisant une sous-requête comme suit :

INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value

9voto

Otávio Décio Points 44200

Desde ici :

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename

0 votes

Cela crée une nouvelle table. Il a déjà une table existante.

4voto

Joe Skora Points 6535

Vous pouvez utiliser un select into déclaration. En savoir plus sur W3Schools .

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