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:

  1. 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.
  2. 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.
  3. 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 que NOT 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, linstruction MERGE met à jour les valeurs dans les colonnes de nom de catégorie et de montant dans la table sales.category.
  • Deuxièmement, les lignes avec les id 5 et 6 de la table sales.category_staging nexistent pas dans la table sales.category, ainsi linstruction MERGE insère ces lignes dans la table cible.
  • Troisièmement, la ligne avec lID 2 de la table sales.category nexiste pas dans la table sales.sales_staging, par conséquent, le MERGE 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *