Microsoft SQL Server
Déplacer et copier des données autour des tables
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;