Maison >base de données >tutoriel mysql >Comment l'instruction MERGE peut-elle récupérer l'identité générée et les données sources dans les opérations INSERT de SQL Server ?
Insérer dans... Fusionner... Sélectionnez : Utiliser MERGE pour récupérer l'identité générée
Dans SQL Server, l'INSERT... L'instruction SELECT permet l'insertion de données dans une table cible à partir d'une autre table ou requête. Cependant, il présente des limites lors de l’extraction de valeurs à partir de plusieurs sources. Une solution existe en utilisant l'instruction MERGE, qui permet de récupérer à la fois les données insérées et les données sources.
Pour illustrer, considérons la situation suivante :
INSERT INTO Table3 (Column2, Colonne3, Colonne4, Colonne5)<br>SELECT null, 110, Table1.ID, Table2.Column2<br>FROM Table1</p> <pre class="brush:php;toolbar:false"> JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 JOIN Table2 on Table1Table2Link.Column2=Table2.ID
Il est nécessaire de capturer l'identité générée (Inserted.ID) à partir de Table3 et Table2.ID et de les insérer dans une table ou une variable temporaire. Bien que la clause OUTPUT soit couramment utilisée à cette fin, elle ne peut pas extraire les données de différentes tables.
La solution réside dans l'utilisation de MERGE pour remplir la table au lieu de INSERT...SELECT. Cela permet d'accéder aux valeurs insérées et sources dans la clause de sortie :
MERGE INTO Table3 USING<br>(</p> <pre class="brush:php;toolbar:false">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 -- Toujours pas de correspondance
WHEN NOT MATCHED ALORS
INSÉRER (Colonne2, Colonne3, Colonne4, Colonne5)
VALEURS (s.col2, s.col3, s.col4, s.col5)
OUTPUT Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);
En utilisant MERGE, la clause OUTPUT peut obtenir à la fois l'identité insérée (Inserted.ID) et la valeur de Table2 (Table2.ID) et les insérer dans @MyTableVar pour plus de détails. traitement.
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!