Copier les données dans une autre table

154

Comment copier / ajouter des données d'une table dans une autre table avec le même schéma dans SQL Server?

Éditer:

disons qu'il y a une requête

select * 
into table1 
from table2 
where 1=1 

qui crée table1avec le même schéma ainsi que les données que dans table2.

Existe-t-il une courte requête comme celle-ci pour ne copier que des données entières uniquement dans une table déjà existante?

Rajaram Shelar
la source
Juste pour des informations complètes, faites attention ces commandes NE copient PAS les index et les déclencheurs de table! Voir l'article suivant pour le script de copie des index et des déclencheurs: stackoverflow.com/questions/7582852/…
HausO
Comment résoudre ça? INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

Réponses:

310

Si les deux tables sont vraiment le même schéma:

INSERT INTO newTable
SELECT * FROM oldTable

Sinon, vous devrez spécifier les noms des colonnes (la liste des colonnes pour newTableest facultative si vous spécifiez une valeur pour toutes les colonnes et sélectionnez les colonnes dans le même ordre que newTablele schéma de):

INSERT INTO newTable (col1, col2, col3)
SELECT column1, column2, column3
FROM oldTable
lc.
la source
1
et si je veux entrer blank datapour une colonne ??
hud
3
@coder n'est qu'une clause de sélection, vous pouvez donc y mettre tout ce que vous voulez, y compris des NULLs explicites , des constantes de chaîne, des expressions ou même des sous-requêtes.
lc.
pourquoi cela ne fonctionne pasINSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');
1
@AbdullahNurum Parce que votre requête scalaire sélectionne plus d'une colonne. Voir stackoverflow.com/questions/4141370/… et stackoverflow.com/questions/6254913/…
lc.
1
Si les deux tables présentent un schéma similaire, mais qu'il existe une colonne avec «Spécification d'identité» sur OUI, l'instruction SQL doit énumérer toutes les colonnes, sauf celle avec la spécification d'identité.
Gabriel Marius Popescu
18

Voici la bonne façon de procéder:

INSERT INTO destinationTable
SELECT * FROM sourceTable
Zzz
la source
16

Un moyen simple si la nouvelle table n'existe pas et que vous souhaitez faire une copie de l'ancienne table avec tout ce qui suit fonctionne dans SQL Server.

SELECT * INTO NewTable FROM OldTable
Satish Patel
la source
11
INSERT INTO table1 (col1, col2, col3)
SELECT column1, column2, column3
FROM table2                                        
user3566871
la source
9

Essaye ça:

INSERT INTO MyTable1 (Col1, Col2, Col4)
   SELECT Col1, Col2, Col3 FROM MyTable2
Abe Miessler
la source
6

Essaye ça:

Insert Into table2
Select * from table1
Kapil Khandelwal
la source
4
INSERT INTO DestinationTable(SupplierName, Country)
SELECT SupplierName, Country FROM SourceTable;

Il n'est pas obligatoire que les noms de colonne soient identiques.

S.Adikaram
la source
3

Insérer la colonne sélectionnée avec condition

INSERT INTO where_to_insert (col_1,col_2) SELECT col1, col2 FROM from_table WHERE condition;

Copiez toutes les données d'une table à une autre avec le même nom de colonne.

INSERT INTO where_to_insert 
SELECT * FROM from_table WHERE condition;
Nimmi Verma
la source
0
CREATE TABLE `table2` LIKE `table1`;
INSERT INTO `table2` SELECT * FROM `table1`;

la première requête créera la structure de table1à table2et la seconde requête mettra les données de table1àtable2

Renish Gotecha
la source