Jakákoli ze čtyř hodnot v #S
bude odpovídat hodnotě jednoho řádku vaší cílové tabulky (všechny hodnoty v #S mají id =1 a název ='A' – takže všechny odpovídají jednomu řádku v cíli), takže tato hodnota bude aktualizována čtyřikrát – to je ta chyba říká a je to naprosto správné.
Čeho tady chceš vlastně dosáhnout??
Chcete nastavit adresu na první z hodnot ze zdrojové tabulky? Použijte TOP 1
klauzule ve vašem podvýběru:
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;
Chcete nastavit adresu na náhodný prvek hodnot ze zdrojové tabulky? Použijte TOP 1
a ORDER BY NEWID()
klauzule ve vašem podvýběru:
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;
Pokud přiřadíte čtyři zdrojové řádky k jednomu cílovému řádku, nikdy nedosáhnete užitečného výsledku – musíte vědět, co skutečně chcete.
Marc