Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pole tabeli nadrzędnej aktualizacji SQL oparte na wielu wierszach tabeli podrzędnej

update parent
set longtext =
    stuff((
    select ',' + c.char + ': ' + c.val
    from child c
    where c.uid = parent.uid
    for xml path(''), type).value('.','nvarchar(max)'),1,1,'');

Zaktualizowałem Twój SQLFiddle z rozwiązaniem.

  1. STUFF() funkcja usuwania początkowego ',' (przecinek) od pierwszej cechy.

  2. DLA XML aby utworzyć dokument XML z wyniku zapytania. Jest to dobrze znana sztuczka w SQL Server - ponieważ kolumna nie jest nazwana, nie jest wytwarzany żaden element i tylko surowy tekst (każdy wiersz) jest wyprowadzany, połączony w jeden wiersz.

Bardzo niewiele artykułów w Internecie próbuje wyjaśnić to szczegółowo, ponieważ kod pozostaje w zasadzie wyjaśnieniem samym w sobie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakieś wady WITH RECOMPILE dla comiesięcznych przechowywanych procesów SQL Server?

  2. Mutex analogowy w SQL?

  3. Unikalne ograniczenie, z wyłączeniem wartości NULL

  4. Korzystanie z kolumn czasu z NHibernate, Fluent NHibernate i SQL Server 2008

  5. Czy istnieją sposoby na dodanie 2 tabeli podczas korzystania z instrukcji INSERT w konstruktorze zapytań?