Instruction SQL Server Merge

Instruction SQL Server Merge

Les bases de données sont toutes une question d'opérations CRUD. Nous créons, lisons, mettons à jour et supprimons les données dans diverses tables de base de données. Cependant, la plupart des opérations CRUD dans une base de données nécessitent une logique distincte pour les tâches, telles que l'insertion, la mise à jour et la suppression.

Cela peut devenir redondant rapidement. SQL Server fournit un moyen efficace d'effectuer des opérations de crud à l'aide de l'instruction Merge. Microsoft a présenté l'instruction Merge dans SQL Server 2008 et au-dessus.

Ce tutoriel comprendra comment utiliser l'instruction SQL Server Merge pour effectuer plusieurs opérations dans une seule requête.

Les bases

Laissez-nous prendre un exemple de l'endroit où vous avez deux tables. Les tables cibles et source. Si vous devez mettre à jour les valeurs dans la table cible en fonction des valeurs des tables source, vous pouvez prendre trois chemins:

  1. Le premier est l'endroit où la source contient des lignes manquantes dans la table cible. Vous avez besoin d'une instruction INSERT à la table cible dans un tel cas.
  2. Le second est où le tableau cible contient des enregistrements manquants de la table source. Ici, nous avons besoin d'une déclaration de suppression pour supprimer les lignes de la cible.
  3. Le dernier scénario est l'endroit où un enregistrement en source et cible contient des valeurs différentes. Nous avons besoin d'une instruction de mise à jour sur la table cible dans un tel cas.

Pour effectuer les opérations ci-dessus individuellement, nous devons créer trois logiques distinctes pour les opérations d'insertion, de suppression et de mise à jour. Cependant, nous pouvons les combiner en utilisant l'instruction Merge.

Nous pouvons exprimer la syntaxe de l'instruction Merge comme indiqué:

Fusionner Target_Table à l'aide de Source_Table
À condition
Lorsqu'il est assorti
Puis mise à jour_opération
Lorsqu'il n'est pas apparié - par table cible
Puis insert_opération
Lorsqu'il n'est pas apparié par la source
Puis supprimer;

Nous identifions le tableau cible et source et les spécifions dans la clause de fusion. Nous spécifions ensuite une condition. La condition spécifiée contrôle comment les lignes de la table source sont adaptées aux tables cibles. Considérez-le comme une condition de jointure.

Le bloc suivant contient les actions à effectuer en fonction du résultat de la condition spécifiée.

Si la condition entraîne une correspondance, nous mettons à jour les enregistrements dans le tableau cible de la table source.

Cependant, si les enregistrements sont inégalés (à partir de la table cible), nous insérons les enregistrements manquants dans le tableau cible.

Enfin, si les enregistrements sont inégalés (par la table cible), nous supprimons les enregistrements inégalés de la table cible.

SQL Server - Exemple de fusion

Prenons un exemple simple. Supposons que nous disposons de deux tableaux contenant des informations sur les produits comme produits_target et product_source.

L'exemple d'extrait de code montre les requêtes SQL pour créer et mettre à jour les tables spécifiées.

Utiliser SalesDB;
Créer des produits Table_Target (
Product_id int not null primaire clé d'identité (1,1),
Product_name varchar (255) pas null,
prix décimal (10,2)
));
Insérer dans Products_target (Product_name, Price)
Valeurs («bureau de bureau», 531),
(«Chaire de bureau», 379.99),
(«Bouteille d'eau», 69.99);
Créer des produits Table_Source (
Product_id int not null primaire clé d'identité (1,1),
Product_name varchar (255) pas null,
prix décimal (10,2)
));
Insérer dans Products_source (Product_name, Price)
Valeurs («bureau de bureau», 531.00),
(«Lampe de bureau», 50.00),
(«Chaire de bureau», 699.99),
(«Bouteille d'eau», 89.95);

Maintenant, nous avons deux tables en tant que cible et source. Les enregistrements stockés dans les tableaux sont indiqués:

Pour synchroniser les données entre le tableau cible et source, nous pouvons exécuter une requête de fusion comme indiqué dans l'exemple ci-dessous:

Fusionner les produits_target comme t
Utilisation de produits_source comme s
Sur (s.product_id = t.Product_id)
Lorsqu'il est assorti
Puis mettre à jour l'ensemble
t.Product_name = S.Product_name,
t.prix = s.prix
Lorsqu'il n'est pas égalé par la cible
Puis insérer (product_name, prix)
Valeurs (s.Product_name, s.prix)
Lorsqu'il n'est pas apparié par la source
Puis supprimer;

Une fois que nous aurons exécuté la requête ci-dessus, le serveur SQL effectuera les opérations spécifiées en fonction de la condition résultante.

Nous pouvons interroger les tables après l'opération de fusion comme:

SELECT * FROM products_source;
SELECT * FROM products_target;

Les valeurs résultantes sont comme indiqué dans l'exemple ci-dessous:


Comme vous le remarquerez, les enregistrements de table source et cible sont synchronisés avec les valeurs mises à jour, insérées et supprimées.

Conclusion

Ce guide vous montre comment travailler avec l'instruction SQL Server Merge. Il vous permet d'effectuer des opérations d'insertion, de mise à jour et de suppression sur les tables en fonction des conditions résultantes.

Merci pour la lecture!