Fügen Sie aus dem ausgewählten Abfrageerrors in SQL server ein

Ich benutze die folgende Abfrage, um data von einer Tabelle in eine andere einzufügen:

DECLARE @MATNO NVARCHAR(10), @GLOBALREV INT, @LOCALREP INT SET @MATNO = '7AGME' SET @GLOBALREV = 11 SET @LOCALREP = 1 INSERT INTO CIGARETTE_HEADER VALUES (SELECT * FROM CIGARETTE_HEADER_BK1 WHERE MATERIAL_NUMBER = @MATNO AND GLOBAL_REVISION = @GLOBALREV AND LOCAL_REVISION = @LOCALREP) 

Die Spalte in beiden Tabellen ist gleich, aber ich bekomme folgende Fehlermeldung:

Msg 156, Stufe 15, Zustand 1, Zeile 7
Falsche Syntax in der Nähe des Stichwortes 'SELECT'.

Msg 102, Stufe 15, Zustand 1, Zeile 7
Falsche Syntax in der Nähe ')'.

Kannst du mir bitte den Fehler melden?

Um ein bisschen auf das Problem zu erweitern.

VALUES () ist eigentlich ein Tabellenbauer. Beim Einfügen von Zeilen in eine Tabelle können Sie entweder SELECT verwenden, um Zeilen oder VALUE-Konstruktor abzurufen.

Obwohl INSERT INTO … VALUES häufig in Beispielen verwendet wird, um eine Zeile einzufügen, können Sie es verwenden, um mehrere Zeilen einzufügen und sie mit Kommas zu trennen.

Z.B. INSERT INTO Tabelle (col1, col2) VALUES (1, 2), (3, 4), (5, 6)

Würde einen Satz von 3 Reihen in deinen Tisch insert.

VALUES können auch verwendet werden, um abgeleitete Tabellen zu erstellen, so dass einige erweiterte datamanipulation.

https://msdn.microsoft.com/en-us/library/dd776382.aspx

Sie brauchen kein VALUES Stichwort:

 INSERT INTO CIGARETTE_HEADER SELECT * FROM CIGARETTE_HEADER_BK1 WHERE MATERIAL_NUMBER = @MATNO AND GLOBAL_REVISION = @GLOBALREV AND LOCAL_REVISION = @LOCALREP 

Es ist auch vorzuziehen, explizit jeden Feldnamen der beiden Tabellen zu nennen, die an der INSERT statement teilnehmen.

Sie müssen die VALUES () – Notation nicht verwenden. Sie verwenden das nur, wenn Sie statice Werte insert möchten und nur ein Register. Beispiel: INSERT INTO Tabelle VALUES ('value1', 12, newid ());

Auch ich empfehle, den Namen der Spalten zu schreiben, die du insert möchtest, wie folgt:

 INSERT INTO Table (String1, Number1, id) VALUES('value1',12, newid()); 

In deinem Fall das gleiche aber nur mit der Auswahl:

 DECLARE @MATNO NVARCHAR(10), @GLOBALREV INT, @LOCALREP INT; SET @MATNO = '7AGME'; SET @GLOBALREV = 11; SET @LOCALREP = 1; INSERT INTO CIGARETTE_HEADER (ColumnName1, ColumnName2) SELECT ColumnNameInTable1, ColumnNameInTable2 FROM CIGARETTE_HEADER_BK1 WHERE MATERIAL_NUMBER = @MATNO AND GLOBAL_REVISION = @GLOBALREV AND LOCAL_REVISION = @LOCALREP);