Salah satu dari empat nilai dalam #S
akan cocok dengan nilai baris tunggal tabel target Anda (semua nilai dalam #S memiliki id =1 dan name ='A' - jadi semuanya cocok dengan satu baris dalam target), sehingga nilai ini akan diperbarui empat kali - itulah kesalahannya katanya, dan itu benar sekali.
Apa yang benar-benar ingin Anda capai di sini??
Apakah Anda ingin mengatur Alamat ke nilai pertama dari tabel sumber? Gunakan TOP 1
klausa di subpilihan Anda:
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;
Apakah Anda ingin mengatur Alamat ke elemen acak dari nilai dari tabel sumber? Gunakan TOP 1
dan ORDER BY NEWID()
klausa di subpilihan Anda:
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;
Jika Anda mencocokkan empat baris sumber dengan satu baris target, Anda tidak akan pernah mendapatkan hasil yang bermanfaat - Anda perlu mengetahui apa yang sebenarnya Anda inginkan.
Marc