SQL Server : Les 3 différents types d’INSERT
Comment
insérer des données dans une table ? Eh bien par INSERT. Derrière cette
évidence saviez vous que vous avez en fait 3 types d'INSERT ?
INSERT / VALUES
Le courant d'entre tous, c'est celui-ci qui permet d'insérer les valeurs d'un enregistrement à la fois.
INSERT MaTable
VALUES (1, 2, 3)
Le INTO est toujours optionnel dans la syntaxe, la
liste de champs suivant le nom de la table l'est aussi, si le nombre de
valeurs dans le VALUES correspondant au nombre / type de champs de la table. Dans le cas contraire cette liste est obligatoire.
INSERT MaTable (ChampA, ChampB)
VALUES (1, 2)
Il est possible d'utiliser les mots clefs DEFAULT et DEFAULT VALUES , ils permettent respectivement d'insérer la valeur par défaut du champ où l'on spécifie DEFAULT ou NULL si
ce dernier n'en possède pas. Pour le second cela permet d'indiquer que
l'on souhaite les valeurs par défaut de tous les champs de la table.
-- Insertion de la valeur par défaut de ChampB
INSERT MaTable (ChampA, ChampB)
VALUES (1, DEFAULT)
-- Insertion de la valeur par défaut de tous les champs de la table
INSERT MaTable (ChampA, ChampB)
DEFAULT VALUES
Sous SQL Server 2008, il sera possible d'insérer plusieurs enregistrements à la fois avec cette syntaxe.
INSERT MaTable (ChampA, ChampB)
VALUES (1, 2), (3, 4), (5, 6)
Ici on insère 3 enregistrements dans MaTable.
INSERT / SELECT
La seconde variante permet l'insertion multiple d'enregistrements à partir d'une autre source de données (ou de la même).
INSERT MaTable
SELECT *
FROM MaTable2
La règle pour la liste de champ suivant la table où vont être inséré
les enregistrements est la même que pour VALUES, le nombre de champs et
leur type doivent être respectés. Il est donc aussi possible de fournir
la liste des champs des 2 tables
INSERT MaTable (ChampA, ChampB)
SELECT ChampX, ChampY
FROM MaTable2
Fournir une constance est encore possible, elle sera juste ajouté au SELECT
INSERT MaTable (ChampA, ChampB)
SELECT ChampX, 7
FROM MaTable2
INSERT / EXEC
Dernière variante sans doute la moins connu, permet de récupérer le
résultat d'une procédure stockée ou de l'exécution de SQL dynamique. La
difficulté de cette syntaxe réside dans le fait qu'il faut créer la
table sur laquelle faire l'insertion sans quasiment connaitre la
structure renvoyée.
INSERT MaTable
EXEC MaProc 1, 2
INSERT MaTable2
EXEC('DBCC SHOWCONTIG WITH TABLERESULTS')
Ici aussi il est possible de spécifier la liste des champs de la
table de destination derrière son nom. Par contre au niveau de l'EXEC
il n'est pas possible de changer quoi que ce soit. On ne récupèrera de
cette manière que le premier jeu de données dans le cas où la procédure
stockées en renvoie plusieurs.
Cette méthode permet en fait de tout récupérer étant donné que le
SQL dynamique y est autorisé, en prenant exemple sur le second exemple,
même le flux de données des commandes DBCC peut être inséré dans des
tables.
Bon développement…
Source : http://blogs.codes-sources.com/christian/archive/2007/10/24/sql-server-les-3-diff-rents-types-d-insert.aspx
Hébergement ASP.NET par : La Station Internet