460 Stimmen

SQL Server SELECT in bestehende Tabelle

Ich versuche, einige Felder aus einer Tabelle auszuwählen und sie über eine gespeicherte Prozedur in eine vorhandene Tabelle einzufügen. Ich versuche Folgendes:

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 eine Fehlermeldung erhalte, dass dbo.TableTwo existiert bereits.

Wie kann ich mehrere Zeilen aus dbo.TableOne in dbo.TableTwo ?

747voto

OMG Ponies Punkte 312816

SELECT ... INTO ... funktioniert nur, wenn die in der INTO-Klausel angegebene Tabelle nicht existiert - andernfalls müssen Sie:

INSERT INTO dbo.TABLETWO
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

Dabei wird davon ausgegangen, dass nur zwei Spalten in dbo.TABLETWO vorhanden sind - andernfalls müssen Sie die Spalten angeben:

INSERT INTO dbo.TABLETWO
  (col1, col2)
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

38voto

Somnath Muluk Punkte 51007

Es gibt zwei verschiedene Möglichkeiten, Daten aus einer Tabelle in eine andere Tabelle einzufügen.

Für bestehende Tabellen - INSERT INTO SELECT

Diese Methode wird verwendet, wenn die Tabelle bereits zuvor 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, ist es nicht erforderlich, sie aufzulisten. Aus Gründen der Lesbarkeit und Skalierbarkeit ist es jedoch sinnvoll, sie immer aufzuführen.

----Create testable
CREATE TABLE TestTable (FirstName VARCHAR(100), LastName VARCHAR(100))
----INSERT INTO TestTable using SELECT
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

Bei nicht vorhandener Tabelle - SELECT INTO

Diese Methode wird verwendet, wenn die Tabelle nicht vorher erstellt wurde und erstellt werden muss, wenn Daten aus einer Tabelle in die neu erstellte Tabelle aus einer anderen Tabelle eingefügt werden sollen. Die neue Tabelle wird mit denselben Datentypen wie die ausgewählten Spalten erstellt.

----Create a new table and insert into table using SELECT INSERT
SELECT FirstName, LastName
INTO TestTable
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

Ref 1 2

5voto

Vinod Pareek Punkte 105

Es würde wie folgt funktionieren:

insert into Gengl_Del Select Tdate,DocNo,Book,GlCode,OpGlcode,Amt,Narration 
from Gengl where BOOK='" & lblBook.Caption & "' AND DocNO=" & txtVno.Text & ""

4voto

slayernoah Punkte 4114

Wenn die Zieltabelle gibt es aber Sie wollen keine Spaltennamen angeben:

DECLARE @COLUMN_LIST NVARCHAR(MAX);
DECLARE @SQL_INSERT NVARCHAR(MAX);

SET @COLUMN_LIST = (SELECT DISTINCT
    SUBSTRING(
        (
            SELECT ', table1.' + SYSCOL1.name  AS [text()]
            FROM sys.columns SYSCOL1
            WHERE SYSCOL1.object_id = SYSCOL2.object_id and SYSCOL1.is_identity <> 1
            ORDER BY SYSCOL1.object_id
            FOR XML PATH ('')
        ), 2, 1000)
FROM
    sys.columns SYSCOL2
WHERE
    SYSCOL2.object_id = object_id('dbo.TableOne') )

SET @SQL_INSERT =  'INSERT INTO dbo.TableTwo SELECT ' + @COLUMN_LIST + ' FROM dbo.TableOne table1 WHERE col3 LIKE ' + @search_key
EXEC sp_executesql @SQL_INSERT

1voto

Zinith Patel Punkte 11

WENN Sie eine Identitätsspalte in einer neuen Tabelle wünschen, die mit select into erstellt wurde, kann dies wie folgt geschehen.

SELECT 
 ID = IDENTITY(INT, 1, 1),
        name
INTO    table2
FROM table1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X