Insertion de plusieurs lignes dans une seule requête SQL ?

J'ai plusieurs ensembles de données à insérer en une seule fois, disons 4 lignes. Ma table a trois colonnes : Person, Id et Office.

INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office");
INSERT INTO MyTable VALUES ("Jane", 124, "Lloyds Office");
INSERT INTO MyTable VALUES ("Billy", 125, "London Office");
INSERT INTO MyTable VALUES ("Miranda", 126, "Bristol Office");

Puis-je insérer les 4 lignes dans une seule instruction SQL ?

En SQL Server 2008, vous pouvez insérer plusieurs lignes à l'aide d'une seule instruction SQL INSERT.

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

Pour plus de détails, consultez le cours MOC 2778A - Writing SQL Queries in SQL Server 2008.

Par exemple :

INSERT INTO MyTable
  ( Column1, Column2, Column3 )
VALUES
  ('John', 123, 'Lloyds Office'), 
  ('Jane', 124, 'Lloyds Office'), 
  ('Billy', 125, 'London Office'),
  ('Miranda', 126, 'Bristol Office');
Commentaires (13)

Si vous insérez dans une seule table, vous pouvez écrire votre requête comme ceci (peut-être seulement dans MySQL) :

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');
Commentaires (10)

REMARQUE: Cette réponse concerne SQL Server 2005. Pour SQL Server 2008 et les versions ultérieures, il existe de bien meilleures méthodes, comme indiqué dans les autres réponses.

Vous pouvez utiliser [INSERT avec SELECT UNION ALL][1] :

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

Mais seulement pour les petits ensembles de données, ce qui devrait être suffisant pour vos 4 enregistrements.

[1] : http://blog.sqlauthority.com/2007/06/08/sql-server-insert-multiple-records-using-one-insert-statement-use-of-union-all/

Commentaires (0)