web-dev-qa-db-fra.com

Insérer plusieurs lignes dans une seule requête SQL?

J'ai plusieurs ensembles de données à insérer en même temps, par exemple 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 insert chacun des 4 rangées d'un seul SQL statement?

1572
rits

Dans 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 en savoir plus, consultez le cours MOC 2778A - Rédaction de requêtes SQL dans 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');
2108
BinaryMisfit

Si vous insérez dans une seule table, vous pouvez écrire votre requête de la manière suivante (peut-être uniquement dans MySQL):

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');
775
too much php

REMARQUE: Cette réponse concerne SQL Server 2005. Pour SQL Server 2008 et versions ultérieures, il existe des méthodes bien meilleures que celles décrites dans les autres réponses.

Vous pouvez utiliser INSERT avec SELECT UNION ALL :

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

Seulement pour les petits jeux de données, ce qui devrait convenir à vos 4 enregistrements.

129
DavGarcia