Dans SQL Server 2005, j'essaie de comprendre pourquoi je ne parviens pas à insérer plusieurs champs dans une table. La requête suivante, qui insère un enregistrement, fonctionne correctement:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1000,N'test')
Cependant, la requête suivante, qui spécifie plusieurs valeurs, échoue:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1000,N'test'),(1001,N'test2')
Je reçois ce message:
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ','.
Lorsque j'ai consulté l'aide relative à INSERT dans SQL Sever Management Studio, l'un de leurs exemples a montré l'utilisation de la syntaxe "Values" que j'ai utilisée (avec des groupes de valeurs entre parenthèses et séparés par des virgules). La documentation d'aide trouvée dans SQL Server Management Studio ressemble à celle de SQL Server 2008; c'est peut-être pour cette raison que l'insertion ne fonctionne pas. De toute façon, je ne comprends pas pourquoi cela ne fonctionnera pas.
La syntaxe que vous utilisez est nouvelle dans SQL Server 2008:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1000,N'test'),(1001,N'test2')
Pour SQL Server 2005, vous devrez utiliser plusieurs instructions INSERT
:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1000,N'test')
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1001,N'test2')
Une autre option consiste à utiliser UNION ALL
:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
SELECT 1000, N'test' UNION ALL
SELECT 1001, N'test2'
Vous pouvez également utiliser la syntaxe suivante: -
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
De ici
Dans SQL Server 2008, 2012-2014, vous pouvez insérer plusieurs lignes à l'aide d'une seule instruction SQL INSERT.
INSERT INTO TableName ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )
Autrement
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