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.