![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
MERGE est une nouveauté de SQL Server 2008, qui permet d’effectuer plusieurs opérations
INSERT, UPDATE et DELETE en une seule instruction. En fonctions de conditions,
l’instruction MERGE peut :
. Mettre à jour une ligne si elle existe, ou insérer les données dans une nouvelle ligne
83
. Synchroniser le contenu de 2 tables
Soit la table RECAP qui est alimentée toutes les nuits par un processus lisant les commandes
du jour : Si le produit commandé existe dans la table RECAP, la quantité totale est
incrémentée de la quantité commandée, s’il n’existe pas, une nouvelle ligne est créée dans la
table RECAP.
MERGE RECAP as Cible
USING (SELECT IDProduit, QteCommandee FROM DETAILCOMMANDE
WHERE DateCde = CAST(GETDATE() as DATE)) as Source
ON ( Cible.IDProduit = Source.IDProduit)
WHEN MATCHED
THEN UPDATE Set Cible.QteTotale = Cible.QteTotale + Source.QteCommandee
WHEN NOT MATCHED
THEN INSERT (IDProduit, QteTotale)
VALUES(Source.IDProduit,Source.QteCommandee);
--Une instruction MERGE doit se terminer par un point-virgule
La clause INTO spécifie la table ou vue qui est la cible des opérations d'insertion, de mise à
jour ou de suppression.
La clause USING…ON spécifie la table ou la requête à appliquer en tant que conditions de
recherche pour les critères correspondants.
Les clauses WHEN spécifient les actions à prendre en fonction des résultats de la clause
USING…ON.
o WHEN MATCHED indique que la condition est vérifiée
o WHEN NOT MATCHED [BY TARGET] indique que la condition n’est pas vérifiée du
fait de la cible
o WHEN NOT MATCHED [BY SOURCE] indique que la condition n’est pas vérifiée du
fait de la source
La clause OUTPUT retourne une ligne pour chaque ligne dans l'objet cible mis à jour, inséré
ou supprimé.