Всяка от четирите стойности в #S
ще съответства на стойността на един ред на вашата целева таблица (всички стойности в #S имат id =1 и име ='A' - така че всички те съответстват на единичния ред в целта), по този начин тази стойност ще бъде актуализирана четири пъти - това е грешката казва и е абсолютно правилно.
Какво наистина искате да постигнете тук??
Искате ли да зададете адреса на първата от стойностите от изходната таблица? Използвайте TOP 1
клауза във вашия подизбор:
MERGE #T
USING (SELECT TOP 1 id, name, address FROM #S) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
UPDATE SET Address = S.Address;
Искате ли да зададете адреса на случаен елемент от стойностите от изходната таблица? Използвайте TOP 1
и ORDER BY NEWID()
клауза във вашия подизбор:
MERGE #T
USING (SELECT TOP 1 id, name, address FROM #S ORDER BY NEWID()) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
UPDATE SET Address = S.Address;
Ако свържете четири изходни реда с един целеви ред, никога няма да получите полезен резултат - трябва да знаете какво наистина искате.
Марк