Recherche sur le blog

mardi 21 avril 2015

[SQL] Insertion multiple

Dans de nombreuses bases de données, il existe la possibilité d'effectuer une insertion multiple avec une seule requête SQL. La syntaxe suivante montre comment écrire la requête pour ajouter deux enregistrements.
INSERT INTO ma_table (col1, col2, ..., col n) 
VALUES
  (val1, 'val2',..., val n),
  (val4, 'val5',..., val z)
La même requête en omettant le nom des colonnes.
INSERT ALL 
  INTO ma_table (col1, col2,..., col n) 
   VALUES (val1, 'val2',..., val n)
  INTO ma_table (col1, col2,..., col n) 
   VALUES (val4, 'val5',..., val z)
Compatibilité

Disponible sur (liste non exhaustive) : 
  • MySQL.
  • DB2 (idem sur OS/400).
  • HFSQL (à partir de la version 20).
  • PostgreSQL.
  • SQL Server 2008 et supérieur.
  • (...)
Si vous utilisez la base de données Oracle, la syntaxe est différente.
 INSERT ALL 
  INTO ma_table (col1, col2,..., col n) 
   VALUES (val1, 'val2',..., val n)
  INTO ma_table (col1, col2,..., col n) 
   VALUES (val4, 'val5',..., val z)
Si vous utilisez une ancienne version de SQL Server (l'astuce suivante peut aussi être adaptée pour une base SQLite ou même Firebird).
INSERT INTO [schema.]MaTable (ID, Nom)
SELECT 200, 'Vincent'
UNION ALL
SELECT 300, 'Cyril'
UNION ALL
SELECT 400, 'Rudi'
Avec Firebird 2.0 et supérieur on peut exécuter sous forme de bloc (voir la documentation officielle). N'hésitez pas à partager la syntaxe pour effectuer la même opération dans des bases de données différentes !

1 commentaire:

Reka a dit…

Utile. Merci pour le rappel !