Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

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…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié mercredi 24 octobre 2007 17:57 par christian
Classé sous : ,

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25