73 votes

Insérer plusieurs valeurs à l'aide de INSERT INTO (SQL Server 2005)

Dans SQL Server 2005, j'en suis à essayer de comprendre pourquoi je ne suis pas en mesure d'insérer plusieurs champs dans une table. La requête suivante, qui insère un enregistrement, fonctionne très bien:

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

Toutefois, la requête suivante, qui indique plus d'une valeur, échoue:

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

J'obtiens ce message:

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

Quand j'ai regardé l'aide pour les INSÉRER dans SQL server Management Studio, un de leurs exemples l'ont montré en utilisant les "Valeurs" de la syntaxe que j'ai utilisé (avec des groupes de valeurs entre parenthèses et séparés par des virgules). L'aide de la documentation que j'ai trouvé dans SQL Server Management Studio dirait que c'est pour SQL Server 2008, alors peut-être que c'est pour cette raison que l'insert ne fonctionne pas. De toute façon, je ne peux pas comprendre pourquoi ça ne fonctionne pas.

98voto

Oded Points 271275

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'
 

10voto

Ashish Gupta Points 5229

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
 

D' ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X