#S
の4つの値のいずれか ターゲットテーブルの単一行の値と一致します(#Sのすべての値はid =1およびname='A'であるため、すべてターゲットの単一行と一致します)。したがって、この値は4回更新されます。これがエラーです。と言います、そしてそれは絶対に正しいです。
ここで本当に達成したいことは何ですか?
アドレスをソーステーブルの最初の値に設定しますか? 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;
4つのソース行を1つのターゲット行に一致させると、有用な結果が得られることはありません。本当に必要なものを知る必要があります。
マーク