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.