Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Msg 8672, niveau 16, état 1, ligne 1 L'instruction MERGE a tenté de mettre à jour ou de supprimer la même ligne plusieurs fois

Cela se produit lorsqu'une ligne cible correspond à plusieurs lignes source.
Une instruction MERGE ne peut pas mettre à jour/supprimer plusieurs fois la même ligne de la table cible.

L'erreur est assez explicite, je pense.

Vous avez des lignes en double dans la table source. Donc pour une ligne avec Rownumber = X dans Rows table il y a plus d'une ligne avec Rowno = X dans Temp_info tableau.

Le serveur SQL aimerait savoir quelle ligne parmi ces lignes en double dans la table source utiliser pour la mise à jour sur une ligne dans la table cible.

[Modifier]

En réponse à votre réponse :une des options est de dupliquer, avant d'exécuter la fusion :

with cte
as
(
    select row_number() over(partition by RowNo order by DOB desc) RowNumber
    from Temp_info
)
delete cte
where RowNumber > 1

J'ai utilisé DOB comme le champ qui définit l'ordre de savoir quel est le dernier. Remplacez ce champ par celui que vous souhaitez utiliser pour la commande.