Daten in eine andere Tabelle kopieren


153

Wie kopiere / füge ich Daten aus einer Tabelle in eine andere Tabelle mit demselben Schema in SQL Server hinzu?

Bearbeiten:

Nehmen wir an, es gibt eine Abfrage

select * 
into table1 
from table2 
where 1=1 

das erstellt table1mit dem gleichen Schema sowie Daten wie in table2.

Gibt es eine kurze Abfrage wie diese, um nur ganze Daten nur in eine bereits vorhandene Tabelle zu kopieren?


Um vollständige Informationen zu erhalten, achten Sie darauf, dass diese Befehle KEINE Indizes und Auslöser der Tabelle kopieren! Siehe folgenden Beitrag für das Kopieren von Indizes und Triggerskript: stackoverflow.com/questions/7582852/…
HausO

Wie kann man das lösen? INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

Antworten:


309

Wenn beide Tabellen wirklich dasselbe Schema sind:

INSERT INTO newTable
SELECT * FROM oldTable

Andernfalls müssen Sie die Spaltennamen angeben (die Spaltenliste für newTableist optional, wenn Sie einen Wert für alle Spalten angeben und Spalten in derselben Reihenfolge wie newTabledas Schema auswählen ):

INSERT INTO newTable (col1, col2, col3)
SELECT column1, column2, column3
FROM oldTable

1
Was ist, wenn ich blank datafür eine Spalte eingeben möchte ?
Hud

3
@coder ist nur eine select-Klausel, daher können Sie alles einfügen, was Sie möchten, einschließlich expliziter NULLs, Zeichenfolgenkonstanten, Ausdrücke oder sogar Unterabfragen.
lc.

warum dies nicht funktioniertINSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

1
@AbdullahNurum Da Ihre skalare Abfrage mehr als eine Spalte auswählt. Siehe stackoverflow.com/questions/4141370/… und stackoverflow.com/questions/6254913/…
lc.

1
Wenn beide Tabellen ein ähnliches Schema aufweisen, auf YES jedoch eine Spalte mit 'Identity Specification' vorhanden ist, muss die SQL-Anweisung alle Spalten mit Ausnahme der Spalte mit Identity Specification auflisten.
Gabriel Marius Popescu

18

Dies ist der richtige Weg, um es zu tun:

INSERT INTO destinationTable
SELECT * FROM sourceTable

16

Einfacher Weg, wenn keine neue Tabelle vorhanden ist und Sie eine Kopie der alten Tabelle mit allem erstellen möchten, funktioniert das Folgende in SQL Server.

SELECT * INTO NewTable FROM OldTable

11
INSERT INTO table1 (col1, col2, col3)
SELECT column1, column2, column3
FROM table2                                        

9

Versuche dies:

INSERT INTO MyTable1 (Col1, Col2, Col4)
   SELECT Col1, Col2, Col3 FROM MyTable2


4
INSERT INTO DestinationTable(SupplierName, Country)
SELECT SupplierName, Country FROM SourceTable;

Es ist nicht obligatorisch, dass Spaltennamen identisch sind.


3

Ausgewählte Spalte mit Bedingung einfügen

INSERT INTO where_to_insert (col_1,col_2) SELECT col1, col2 FROM from_table WHERE condition;

Kopieren Sie alle Daten mit demselben Spaltennamen von einer Tabelle in eine andere.

INSERT INTO where_to_insert 
SELECT * FROM from_table WHERE condition;

0
CREATE TABLE `table2` LIKE `table1`;
INSERT INTO `table2` SELECT * FROM `table1`;

Die erste Abfrage erstellt die Struktur von table1bis table2und die zweite Abfrage legt die Daten von table1bis abtable2

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.