Źródło TabelaProblemy z SQL Server oświadczenie MERGE
Id, Name, Address
1 A #202
1 A #203
1 A #204
2 A #202
tabeli docelowej
Po Merge
Id, Name, Address
1 A #202
2 A #202
Używam tego SQL
create table #S (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
create table #T (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
INSERT #S values(1, 'A', '#202')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#204')
INSERT #T values(1, 'A', NULL)
MERGE #T USING
(
Select id, name, address
from #S
) AS S(id,name,address)
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;
GO
Select * from #T
GO
Select * from #S
GO
To powoduje błąd
Msg 8672, Level 16, State 1, wiersz 18
Oświadczenie MERGE próbował zaktualizować lub usunąć ten sam wiersz więcej niż raz. Dzieje się tak, gdy wiersz docelowy pasuje do więcej niż jednego wiersza źródłowego. Instrukcja MERGE nie może wielokrotnie aktualizować/usuwać tego samego wiersza tabeli docelowej. Popraw klauzulę ON, aby upewnić się, że wiersz docelowy pasuje do co najwyżej jednego wiersza źródłowego lub użyj klauzuli GROUP BY do zgrupowania wierszy źródłowych.
Chcę zaktualizować wiersz w A wartością adresu z dowolnej z trzech pasujących wartości. Jak to zrobić?
Chcę zaktualizować wiersz A o wartości Adres z dowolnej z trzech pasujących wartości: –
, ale jak określić, który z nich zastosować? – HLGEM
Użyłem Row_Number jest zarówno źródłem, jak i celem (widok). Następnie kryteria dopasowania zawierały dodatkowy warunek, jeśli wartości rownumbers są równe wraz z (target.address isnull lub (t.address = s.address)) –