Comment copier une ligne d'une table SQL Server vers une autre


91

J'ai deux tables identiques et j'ai besoin de copier des lignes d'une table à une autre. Quelle est la meilleure façon de le faire? (J'ai besoin de copier par programme juste quelques lignes, je n'ai pas besoin d'utiliser l'utilitaire de copie en bloc).

Réponses:


120

Tant qu'il n'y a pas de colonnes d'identité, vous pouvez simplement

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
Soyez prudent avec cette syntaxe car elle ne fonctionnera pas si Table2 a une colonne d'identité et elle se cassera à l'avenir si Table1 change jamais sans que Table2 ne change en synchronisation (m'a brûlé avant). Cette solution pourrait être parfaite pour votre cas, soyez simplement conscient de ces considérations.
Michael Haren

11
Vous pouvez utiliser SET IDENTITY_INSERT < table > ON(et SET IDENTITY_INSERT < table > OFF) pour désactiver temporairement la colonne d'identité sur la table dans laquelle vous essayez d'insérer. J'ai travaillé pour moi en essayant de restaurer quelques enregistrements manquants au milieu de l'ensemble de données.
nickb

1
que se passe-t-il si la clé primaire de la table1 existe dans la table2 en tant que clé étrangère? J'ai la même chose, et je ne sais pas quoi faire .. dans la table2 id la clé étrangère AS "Technology_idTechnology" et dans la table 1, elle est là comme "idTechnology" Je veux copier toutes les entrées de table1 vers table2, lorsque l'idTechnology correspond dans les deux tables ..
ZelelB

71

Syntaxe alternative:

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...

La requête de sélection peut (bien sûr) inclure des expressions, des instructions de cas, des constantes / littéraux, etc.


2
C'est génial lorsque les tableaux diffèrent légèrement. J'ai quelques colonnes supplémentaires dans mon deuxième tableau et la réponse acceptée ne fonctionne pas avec MSSQL car elles doivent être identiques.
Tony M

39

La réponse de Jarrett crée une nouvelle table.

La réponse de Scott s'insère dans une table existante avec la même structure.

Vous pouvez également insérer dans un tableau avec une structure différente:

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]

6
@ScottStonehouse: si vous rassemblez toutes les autres réponses dans cette réponse comme vous l'avez fait mais avec du code (le rendant complet), vous deviendriez certainement la meilleure réponse.
Michael Haren

6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

fonctionne dans SQL Server


2
Cela ne fonctionne que lorsque DestTable n'existe pas. Vous obtiendrez une erreur si DestTable est créé avant cette requête.
Un développeur Web

2
En fait, il échoue si la table de destination n'existe pas. Cela peut provoquer des erreurs si le DestTable existant n'est pas vide.
Kaniu

5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >

1
Y a-t-il un moyen de le faire si ces deux tables sont dans des bases de données diff dans sql-server.
Naresh

9
Sûr! Qualifiez simplement la base de données. [nom du serveur]. [schéma]. [table]. Par exempleSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer

4
Cela crée une nouvelle table, ce qui n'est pas ce que le PO demande.
Conrad le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.