Come copiare una riga da una tabella di SQL Server a un'altra


91

Ho due tabelle identiche e devo copiare le righe da una tabella all'altra. Qual è il modo migliore per farlo? (Ho bisogno di copiare a livello di codice solo poche righe, non ho bisogno di usare l'utilità di copia di massa).

Risposte:


120

Finché non ci sono colonne di identità puoi semplicemente

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
Fai attenzione a questa sintassi poiché non funzionerà se Table2 ha una colonna Identity e si interromperà in futuro se Table1 cambia senza che Table2 cambi in sincronia (bruciato prima). Questa soluzione potrebbe essere perfetta per il tuo caso, tieni solo presente queste considerazioni.
Michael Haren

11
Puoi usare SET IDENTITY_INSERT < table > ON(e SET IDENTITY_INSERT < table > OFF) per disabilitare temporaneamente la colonna Identity sulla tabella in cui stai cercando di inserire. Ha funzionato per me cercando di ripristinare alcuni record mancanti nel mezzo del set di dati.
nickb

1
cosa succede se la chiave primaria in table1 esiste in table2 come chiave esterna? Ho la stessa cosa e non so cosa fare .. in table2 id la chiave esterna AS "Technology_idTechnology" e nella tabella 1, è lì come "idTechnology" Voglio copiare tutte le voci da table1 a table2, quando idTechnology corrisponde in entrambe le tabelle ..
ZelelB

71

Sintassi alternativa:

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

La query di selezione può (ovviamente) includere espressioni, istruzioni case, costanti / letterali, ecc.


2
Questo è ottimo quando le tabelle differiscono leggermente. Ho alcune colonne in più nella mia seconda tabella e la risposta accettata non funziona con MSSQL in quanto devono essere identiche.
Tony M

39

La risposta di Jarrett crea una nuova tabella.

La risposta di Scott si inserisce in una tabella esistente con la stessa struttura.

Puoi anche inserire in una tabella con struttura diversa:

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

6
@ScottStonehouse: se raccogli tutte le altre risposte in questa risposta come hai fatto ma con il codice (rendendola completa), diventeresti sicuramente la risposta migliore.
Michael Haren

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

funziona in SQL Server


2
Funziona solo quando DestTable non esiste. Riceverai un errore se DestTable viene creato prima di questa query.
A Web-Developer

2
In realtà fallisce se la tabella di destinazione non esiste. Potrebbe causare errori se la DestTable esistente non è vuota.
Kaniu

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

1
C'è un modo per farlo se queste due tabelle sono in database diff in sql-server.
Naresh

9
Sicuro! È sufficiente qualificare completamente il database. [servername]. [schema]. [table]. Ad esempioSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer

4
Questo crea una nuova tabella, che non è ciò che richiede l'OP.
Conrad
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.