SQL Server MERGE (Français)
Résumé: dans ce didacticiel, vous apprendrez à utiliser SQL Server MERGE
instruction pour mettre à jour les données dans une table en fonction des valeurs mises en correspondance avec une autre table.
Introduction Instruction SQL Server MERGE
Supposons que vous ayez deux tables appelées tables source et cible, et vous devez mettre à jour la table cible en fonction des valeurs correspondant à la table source. Il existe trois cas:
- La table source contient des lignes qui nexistent pas dans la table cible. Dans ce cas, vous devez insérer des lignes de la table source dans la table cible.
- La table cible contient des lignes qui nexistent pas dans la table source. Dans ce cas, vous devez supprimer des lignes de la table cible.
- La table source contient des lignes avec les mêmes clés que les lignes de la table cible. Cependant, ces lignes ont des valeurs différentes dans les colonnes non clés. Dans ce cas, vous devez mettre à jour les lignes de la table cible avec les valeurs provenant de la table source.
Limage suivante illustre les tables source et cible avec les actions correspondantes: insérer, mettre à jour et supprimer:
Si vous utilisez les instructions INSERT
, UPDATE
et DELETE
individuellement, vous devez en construire trois instructions pour mettre à jour les données de la table cible avec les lignes correspondantes de la table source.
Cependant, SQL Server fournit linstruction MERGE
qui vous permet deffectuer trois actions en même temps. Ce qui suit montre la syntaxe de linstruction MERGE
:
Code language: SQL (Structured Query Language) (sql)
Tout dabord, vous spécifiez la table cible et la source table dans la clause MERGE
.
Deuxièmement, merge_condition
détermine comment les lignes de la table source sont mises en correspondance avec les lignes de la table cible. Elle est similaire à la condition de jointure dans la clause de jointure. En règle générale, vous utilisez les colonnes de clé soit clé primaire soit clé unique pour la correspondance.
Troisièmement, merge_condition
donne trois états: MATCHED
, NOT MATCHED
et NOT MATCHED BY SOURCE
.
-
MATCHED
: ce sont les lignes qui correspondent à la condition de fusion. Dans le diagramme, ils sont représentés en bleu. Pour les lignes correspondantes, vous devez mettre à jour les colonnes de lignes dans la table cible avec les valeurs de la table source. -
NOT MATCHED
: ce sont les lignes de la source table qui na pas de lignes correspondantes dans la table cible. Dans le diagramme, ils sont affichés en orange. Dans ce cas, vous devez ajouter les lignes de la table source à la table cible. Notez queNOT MATCHED
est également appeléNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: ce sont les lignes de la table cible qui ne correspondent à aucune ligne de la table source. Ils sont représentés en vert dans le diagramme. Si vous souhaitez synchroniser la table cible avec les données de la table source, vous devrez utiliser cette condition de correspondance pour supprimer des lignes de la table cible.
Exemple dinstruction SQL Server MERGE
Supposons que nous ayons deux tableaux sales.category
et sales.category_staging
qui stockent les ventes par catégorie de produits.
Pour mettre à jour les données vers la sales.category
(table cible) avec les valeurs de sales.category_staging
(table source), vous utilisez la MERGE
instruction:
Dans cet exemple, nous avons utilisé les valeurs des colonnes category_id
des deux tables comme condition de fusion.
- Premièrement, les lignes avec lID 1, 3, 4 de la table
sales.category_staging
correspond aux lignes de la table cible, par conséquent, linstructionMERGE
met à jour les valeurs dans les colonnes de nom de catégorie et de montant dans la tablesales.category
. - Deuxièmement, les lignes avec les id 5 et 6 de la table
sales.category_staging
nexistent pas dans la tablesales.category
, ainsi linstructionMERGE
insère ces lignes dans la table cible. - Troisièmement, la ligne avec lID 2 de la table
sales.category
nexiste pas dans la tablesales.sales_staging
, par conséquent, leMERGE
supprime cette ligne.
Suite à la fusion, les données de la table sales.category
sont entièrement synchronisées avec les données du sales.category_staging
table.
Dans ce didacticiel, vous avez appris à utiliser linstruction SQL Server MERGE
pour apporter des modifications dans une table basée sur les valeurs correspondantes dune autre table.