Maison > base de données > tutoriel mysql > Comment puis-je capturer des données de plusieurs tables lors d'une opération INSERT SQL Server à l'aide de MERGE ?

Comment puis-je capturer des données de plusieurs tables lors d'une opération INSERT SQL Server à l'aide de MERGE ?

Patricia Arquette
Libérer: 2025-01-03 19:08:40
original
912 Les gens l'ont consulté

How Can I Capture Data from Multiple Tables During an SQL Server INSERT Operation Using MERGE?

Insérer dans... Fusionner... Sélectionner dans SQL Server

Dans SQL Server, l'instruction INSERT INTO...SELECT permet vous d'insérer les données d'une requête SELECT dans une table cible. Cependant, lorsque la requête SELECT implique des données provenant de plusieurs tables, la clause OUTPUT ne peut pas capturer les données de différentes tables.

Présentation de MERGE

Pour résoudre ce problème, envisagez d'utiliser la Instruction MERGE. MERGE combine les opérations INSERT, UPDATE et DELETE en une seule instruction. Il vous permet d'effectuer des actions conditionnellement sur les lignes cibles en fonction de critères spécifiques.

Utilisation de MERGE pour les données de sortie

Pour capturer les données des tables insérées et source, vous pouvez utilisez la clause OUTPUT dans une instruction MERGE. L'exemple suivant montre comment insérer des données de plusieurs tables et afficher les fichiers Inserted.ID et Table2.ID :

MERGE INTO Table3 USING
(
    SELECT null AS col2,
           110 AS col3,
           Table1.ID AS col4,
           Table2.Column2 AS col5,
           Table2.ID AS col6
    FROM Table1
    JOIN Table1Table2Link ON Table1.ID = Table1Table2Link.Column1
    JOIN Table2 ON Table1Table2Link.Column2 = Table2.ID
) AS s ON 1 = 0 -- Always not matched
WHEN NOT MATCHED THEN
    INSERT (Column2, Column3, Column4, Column5)
    VALUES (s.col2, s.col3, s.col4, s.col5)
OUTPUT Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);
Copier après la connexion

Dans cette instruction MERGE :

  • La clause USING définit le données source de la requête SELECT.
  • La clause ON spécifie que l'opération MERGE sera toujours une condition NOT MATCHED (c'est-à-dire, ne jamais mettre à jour ou delete).
  • La clause WHEN NOT MATCHED définit l'opération INSERT qui insère les données de la table source dans la table3.
  • La clause OUTPUT capture le Inserted.ID de la table cible (Table3) et Table2.ID de la table source (s.col6) et les stocke dans la variable de table @MyTableVar.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal