it-swarm.com.de

SQL Server SELECT in vorhandene Tabelle

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 den Fehler erhalte, dass dbo.TableTwo bereits vorhanden ist.

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

366
Daniel

SELECT ... INTO ... funktioniert nur, wenn die in der INTO-Klausel angegebene Tabelle nicht vorhanden ist. Andernfalls müssen Sie Folgendes verwenden:

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

Dies setzt voraus, 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
605
OMG Ponies

Es gibt zwei verschiedene Möglichkeiten, um das Einfügen von Daten von 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 Spalten in Einfügungsklausel und Auswahlklausel identisch sind, müssen sie nicht aufgelistet werden. Es wird empfohlen, sie immer aus Gründen der Lesbarkeit und Skalierbarkeit aufzulisten.

----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

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 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 12

11
Somnath Muluk

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 & ""
4
Vinod Pareek
select *
into existing table database..existingtable
from database..othertables....

Wenn Sie select * into tablename from other tablenames bereits verwendet haben, sagen Sie beim nächsten Anhängen select * into existing table tablename from other tablenames

2
Verena_Techie

Wenn die Zieltabelle existiert aber Sie möchten 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
1
slayernoah