Enhver af de fire værdier i #S
vil matche din måltabels enkeltrækkeværdi (alle værdier i #S har id =1 og navn ='A' - så de matcher alle den enkelte række i målet), så denne værdi vil blive opdateret fire gange - det er hvad fejlen siger, og det er helt rigtigt.
Hvad er det egentlig du vil opnå her??
Vil du indstille adressen til den første af værdierne fra kildetabellen? Brug en TOP 1
klausul i dit undervalg:
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;
Vil du indstille adressen til et tilfældigt element af værdierne fra kildetabellen? Brug en TOP 1
og ORDER BY NEWID()
klausul i dit undervalg:
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;
Hvis du matcher fire kilderækker til en enkelt målrække, får du aldrig et brugbart resultat - du skal vide, hvad du virkelig vil have.
Marc