Recherche…


Copier des données d'une table à une autre

Ce code sélectionne les données d'une table et les affiche dans l'outil de requête (généralement SSMS)

SELECT Column1, Column2, Column3 FROM MySourceTable;

Ce code insère ces données dans une table:

INSERT INTO MyTargetTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM MySourceTable;

Copier des données dans une table, en créant cette table à la volée

Ce code sélectionne des données dans une table:

SELECT Column1, Column2, Column3 FROM MySourceTable;

Ce code crée une nouvelle table appelée MyNewTable et y place ces données

SELECT Column1, Column2, Column3 
INTO MyNewTable
FROM MySourceTable;

Déplacer des données dans une table (en supposant la méthode des clés uniques)

Pour déplacer les données, insérez-les d'abord dans la cible, puis supprimez tout ce que vous avez inséré dans la table source. Ce n'est pas une opération SQL normale, mais cela peut être intéressant

Qu'avez-vous inséré? Normalement, dans les bases de données, vous devez avoir une ou plusieurs colonnes que vous pouvez utiliser pour identifier de manière unique les lignes afin que nous puissions en tenir compte et les utiliser.

Cette instruction sélectionne des lignes

SELECT Key1, Key2, Column3, Column4 FROM MyTable;

Tout d'abord, nous les insérons dans notre table cible:

INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;

Maintenant, en supposant que les enregistrements des deux tables soient uniques sur Key1 , Key2 , nous pouvons l'utiliser pour rechercher et supprimer des données de la table source

DELETE MyTable
WHERE EXISTS (
    SELECT * FROM TargetTable 
    WHERE TargetTable.Key1 = SourceTable.Key1
    AND TargetTable.Key2 = SourceTable.Key2
);

Cela ne fonctionnera correctement que si Key1 , Key2 sont uniques dans les deux tables

Enfin, nous ne voulons pas que le travail soit à moitié terminé. Si nous l'enveloppons dans une transaction, alors toutes les données seront déplacées ou rien ne se produira. Cela garantit que nous n'insérons pas les données et que nous ne pouvons pas supprimer les données de la source.

BEGIN TRAN;

INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;


DELETE MyTable
WHERE EXISTS (
    SELECT * FROM TargetTable 
    WHERE TargetTable.Key1 = SourceTable.Key1
    AND TargetTable.Key2 = SourceTable.Key2
);

COMMIT TRAN;


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow