Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проблеми с израза MERGE на SQL Server

Всяка от четирите стойности в #S ще съответства на стойността на един ред на вашата целева таблица (всички стойности в #S имат id =1 и име ='A' - така че всички те съответстват на единичния ред в целта), по този начин тази стойност ще бъде актуализирана четири пъти - това е грешката казва и е абсолютно правилно.

Какво наистина искате да постигнете тук??

Искате ли да зададете адреса на първата от стойностите от изходната таблица? Използвайте 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;

Ако свържете четири изходни реда с един целеви ред, никога няма да получите полезен резултат - трябва да знаете какво наистина искате.

Марк



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете ограничение на външния ключ с ON DELETE CASCADE в SQL Server - SQL Server / TSQL урок, част 80

  2. Excel в SQL Server с Microsoft.ACE.OLEDB.12.0

  3. Тире срещу тире:Заменете тире с тире

  4. Вземете списък с таблици със или без ограничение на първичен ключ във всички бази данни от екземпляр на SQL Server - SQL Server / TSQL Урок, част 61

  5. Заявката е неуспешна или услугата не е отговорила навреме?