Ich versuche, einige Felder aus einer Tabelle auszuwählen und sie aus einer gespeicherten Prozedur in eine vorhandene Tabelle einzufügen. Folgendes versuche ich:
SELECT col1, col2
INTO dbo.TableTwo
FROM dbo.TableOne
WHERE col3 LIKE @search_key
Ich denke, SELECT ... INTO ...
ist für temporäre Tabellen, weshalb ich einen Fehler bekomme, der dbo.TableTwo
bereits existiert.
Wie kann ich mehrere Zeilen von dbo.TableOne
in einfügen dbo.TableTwo
?
sql
sql-server
tsql
stored-procedures
Daniel
quelle
quelle
Antworten:
SELECT ... INTO ...
funktioniert nur, wenn die in der INTO-Klausel angegebene Tabelle nicht vorhanden ist - andernfalls müssen Sie Folgendes verwenden:Dies setzt voraus, dass dbo.TABLETWO nur zwei Spalten enthält. Andernfalls müssen Sie die Spalten angeben:
quelle
SELECT... INTO...
Anweisung scheint nicht zu funktionieren, wenn die in derINTO
Klausel angegebene Tabelle noch nicht vorhanden ist. Ich erhalte den Fehler "Nicht deklarierte Variable". Vielleicht ist dieses Problem nur für MySQL. DieCREATE TABLE ... LIKE .. worked
;Es gibt zwei verschiedene Möglichkeiten, das Einfügen von Daten aus einer Tabelle in eine andere Tabelle zu implementieren.
Für vorhandene Tabelle - INSERT INTO SELECT
Diese Methode wird verwendet, wenn die Tabelle bereits früher in der Datenbank erstellt wurde und die Daten aus einer anderen Tabelle in diese Tabelle eingefügt werden sollen. Wenn die in der Einfügeklausel und der Auswahlklausel aufgeführten Spalten identisch sind, müssen sie nicht aufgelistet werden. Es wird empfohlen, sie aus Gründen der Lesbarkeit und Skalierbarkeit immer aufzulisten.
Für nicht vorhandene Tabelle - SELECT INTO
Diese Methode wird verwendet, wenn die Tabelle nicht früher erstellt wurde und erstellt werden muss, wenn Daten aus einer Tabelle aus einer anderen Tabelle in die neu erstellte Tabelle eingefügt werden sollen. Die neue Tabelle wird mit denselben Datentypen wie ausgewählte Spalten erstellt.
Ref 1 2
quelle
Es würde wie folgt funktionieren:
quelle
SELECT *
wird nicht funktionieren. Dies ist ein besserer Weg, danke!Wenn Sie das
select * into tablename from other tablenames
nächste Mal bereits zum Anhängen verwendet haben, sagen Sieselect * into existing table tablename from other tablenames
quelle
Wenn die Zieltabelle vorhanden ist , Sie jedoch keine Spaltennamen angeben möchten:
quelle