2008-09-11 15 views

Antwort

92

Solange es keine Identitätsspalten sind, können Sie nur

INSERT Table2 
SELECT * FROM Table1 
WHERE [Conditions] 
+19

Seien Sie vorsichtig mit dieser Syntax, da es nicht funktionieren wird, wenn Table2 eine Identity-Spalte hat und es in der Zukunft bricht, wenn Table1 sich ändert, ohne dass Table2 sich synchron ändert (vorher gebrannt). Diese Lösung könnte für Ihren Fall perfekt sein, seien Sie sich dieser Überlegungen bewusst. –

+8

Sie können 'SET IDENTITY_INSERT < table > ON '(und' SET IDENTITY_INSERT < table > OFF') verwenden, um die Identitätsspalte in der Tabelle, in die Sie einfügen möchten, vorübergehend zu deaktivieren. Arbeitete für mich versucht, ein paar fehlende Datensätze in der Mitte des Datasets wiederherzustellen. – nickb

+1

Was ist, wenn der Primärschlüssel in Tabelle1 in Tabelle2 als Fremdschlüssel vorhanden ist? Ich habe das gleiche, und ich weiß nicht, was zu tun ist .. in Tabelle2 ID der Fremdschlüssel AS "Technology_idTechnology" und in Tabelle 1 ist es da als "IDTechnology" Ich möchte alle Einträge aus Tabelle1 zu kopieren table2, wenn die idTechnology in beiden Tabellen übereinstimmt. – ZelelB

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

Gibt es eine Möglichkeit, dies zu tun Wenn diese zwei Tabellen in diff Datenbanken in SQL-Server sind. – Naresh

+9

Sicher! Einfach die Datenbank vollständig qualifizieren. [Servername]. [Schema]. [Tabelle]. Zum Beispiel 'SELECT * INTO [SQLTEST]. [Dbo]. [MITARBEITER] FROM [SQLPROD]. [Dbo]. [MITARBEITER]' –

+3

Dies erstellt eine neue Tabelle, die nicht das ist, was das OP fragt. – Conrad

62

Alternative Syntax:

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

Die Auswahlabfrage kann (natürlich) Ausdrücke enthalten, case-Anweisungen, Konstanten/Literale usw.

+1

Das ist großartig, wenn die Tabellen leicht abweichen. Ich habe ein paar zusätzliche Spalten in meiner zweiten Tabelle und die akzeptierte Antwort funktioniert nicht mit MSSQL, da sie identisch sein müssen. –

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

arbeitet in SQL Server

+2

Dies funktioniert nur, wenn DestTable nicht existiert. Sie erhalten einen Fehler, wenn DestTable vor dieser Abfrage erstellt wird. –

+1

Tatsächlich schlägt es fehl, wenn die Zieltabelle nicht existiert. Es kann zu Fehlern führen, wenn die vorhandene Zieltabelle nicht leer ist. – Kaniu

33

Jarretts Antwort erstellt eine neue Tabelle.

Scotts Antwort fügt in eine vorhandene Tabelle mit der gleichen Struktur ein.

Sie können auch in eine Tabelle einfügen mit unterschiedlicher Struktur:

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

@ScottStonehouse: Wenn du alle Antworten in diese Antwort sammelst, wie du es gemacht hast, aber mit Code (um es umfassend zu machen), würdest du definitiv die beste Antwort sein. –

Verwandte Themen