Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Masalah dengan pernyataan SQL Server MERGE

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menghapus Akun Email Database dari Profil di SQL Server (T-SQL)

  2. Indeks tidak diterapkan pada Tampilan Terindeks

  3. Algoritma pengurutan SQL Server GUID. Mengapa?

  4. SQL Server:gabung dan tambahkan kolom

  5. Suka Operator di Entity Framework?