Microsoft SQL Server
Flytta och kopiera data runt tabeller
Sök…
Kopiera data från en tabell till en annan
Den här koden väljer data ur en tabell och visar dem i frågaverktyget (vanligtvis SSMS)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Denna kod sätter in dessa data i en tabell:
INSERT INTO MyTargetTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Kopiera data till en tabell och skapa tabellen där du är
Den här koden väljer data ur en tabell:
SELECT Column1, Column2, Column3 FROM MySourceTable;
Den här koden skapar en ny tabell som heter MyNewTable
och lägger in den i den
SELECT Column1, Column2, Column3
INTO MyNewTable
FROM MySourceTable;
Flytta data till en tabell (med antagande av en unik nyckelmetod)
För att flytta data sätter du först in dem i målet och tar sedan bort vad du har lagt in från källtabellen. Detta är inte en normal SQL-operation men det kan vara upplysande
Vad satte du in? Normalt i databaser måste du ha en eller flera kolumner som du kan använda för att identifiera rader på ett unikt sätt så vi antar det och använder det.
Detta uttalande väljer några rader
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Först sätter vi in dessa i vår måltabell:
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Förutsatt att poster i båda tabellerna är unika på Key1
, Key2
, kan vi använda det för att hitta och ta bort data från källtabellen
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
Detta fungerar bara korrekt om Key1
, Key2
är unika i båda tabellerna
Slutligen vill vi inte att jobbet är halvt gjort. Om vi avslutar detta i en transaktion kommer antingen alla data att flyttas, eller så kommer ingenting att hända. Detta säkerställer att vi inte sätter in uppgifterna i då kan vi inte ta bort informationen från källan.
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;