Microsoft SQL Server
Sposta e copia i dati intorno alle tabelle
Ricerca…
Copia i dati da una tabella all'altra
Questo codice seleziona i dati da una tabella e li visualizza nello strumento di query (in genere SSMS)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Questo codice inserisce tali dati in una tabella:
INSERT INTO MyTargetTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Copia i dati in una tabella, creando al volo quella tabella
Questo codice seleziona i dati da una tabella:
SELECT Column1, Column2, Column3 FROM MySourceTable;
Questo codice crea una nuova tabella denominata MyNewTable
e inserisce tali dati in essa
SELECT Column1, Column2, Column3
INTO MyNewTable
FROM MySourceTable;
Spostare i dati in una tabella (assumendo il metodo delle chiavi univoche)
Per spostare i dati, devi prima inserirli nella destinazione, quindi eliminare quello che hai inserito dalla tabella di origine. Questa non è una normale operazione SQL ma potrebbe essere illuminante
Cosa hai inserito? Normalmente nei database è necessario disporre di una o più colonne che è possibile utilizzare per identificare in modo univoco le righe, in modo da poterle assumere e utilizzarle.
Questa affermazione seleziona alcune righe
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Per prima cosa inseriamo questi nella nostra tabella di destinazione:
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Ora assumendo record in entrambe le tabelle sono unici su Key1
, Key2
, possiamo usarlo per trovare e cancellare i dati dalla tabella di origine
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
Ciò funziona correttamente solo se Key1
, Key2
sono unici in entrambe le tabelle
Infine, non vogliamo che il lavoro sia finito a metà. Se lo completiamo in una transazione, tutti i dati verranno spostati o non accadrà nulla. Ciò garantisce che non inseriamo i dati in quel momento e che non siamo in grado di eliminare i dati dalla fonte.
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;