Fügen Sie mit INSERT INTO mehrere Werte ein (SQL Server 2005)

73

In SQL Server 2005 versuche ich herauszufinden, warum ich nicht mehrere Felder in eine Tabelle einfügen kann. Die folgende Abfrage, die einen Datensatz einfügt, funktioniert einwandfrei:

INSERT INTO [MyDB].[dbo].[MyTable]
           ([FieldID]
           ,[Description])
     VALUES
           (1000,N'test')

Die folgende Abfrage, die mehr als einen Wert angibt, schlägt jedoch fehl:

INSERT INTO [MyDB].[dbo].[MyTable]
           ([FieldID]
           ,[Description])
     VALUES
           (1000,N'test'),(1001,N'test2')

Ich bekomme diese Nachricht:

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ','.

Als ich die Hilfe für INSERT in SQL Server Management Studio nachgeschlagen habe, wurde in einem ihrer Beispiele die von mir verwendete Syntax "Werte" verwendet (mit Wertegruppen in Klammern und durch Kommas getrennt). Die Hilfedokumentation, die ich in SQL Server Management Studio gefunden habe, scheint für SQL Server 2008 zu sein. Vielleicht ist dies der Grund, warum die Einfügung nicht funktioniert. Auf jeden Fall kann ich nicht herausfinden, warum es nicht funktioniert.

Ben McCormack
quelle
Nur neugierig, wenn Sie es ohne die ,zwischen den Wertesätzen versucht haben ? Ich weiß, dass dieser Beitrag ziemlich alt ist, aber ich bin neugierig. Ich habe dies gefunden, als ich nach einer Antwort gesucht habe, und der größte Teil meiner SQL-Kenntnisse befindet sich in den letzten Jahren.
Malachi

Antworten:

99

Die von Ihnen verwendete Syntax ist neu in SQL Server 2008:

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test'),(1001,N'test2')

Für SQL Server 2005 müssen Sie mehrere INSERTAnweisungen verwenden:

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test')

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1001,N'test2')

Eine andere Option ist UNION ALL:

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
SELECT 1000, N'test' UNION ALL
SELECT 1001, N'test2'
Oded
quelle
Vielen Dank dafür. Wir haben SQL 2005 für das Testsystem verwendet, während wir unter SQL 2008 entwickelt haben. Einige Entwickler waren sich nicht bewusst, dass diese Syntax nur unter SQL 2005 verfügbar ist.
aheil
10

Sie können auch die folgende Syntax verwenden: -

INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3
UNION ALL
SELECT 'Fourth' ,4
UNION ALL
SELECT 'Fifth' ,5
GO

Von hier aus

Ashish Gupta
quelle
1

In SQL Server 2008, 2012, 2014 können Sie mehrere Zeilen mit einer einzigen SQL INSERT-Anweisung einfügen.

 INSERT INTO TableName ( Column1, Column2 ) VALUES
    ( Value1, Value2 ), ( Value1, Value2 )

Ein anderer Weg

INSERT INTO TableName (Column1, Column2 )
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
Rae Lee
quelle