sql >> Database >  >> RDS >> Sqlserver

SQL Update bovenliggend tabelveld op basis van meerdere onderliggende tabelrijen

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,'');

Ik heb je SQLFiddle bijgewerkt met de oplossing.

  1. STUFF() functie om de leidende ',' . te verwijderen (komma) van het eerste kenmerk.

  2. VOOR XML om een ​​XML-document te maken van een queryresultaat. Dit is een bekende truc met SQL Server - omdat de kolom geen naam heeft, wordt er geen element geproduceerd en wordt alleen de onbewerkte tekst (van elke rij) uitgevoerd, samengevoegd tot een enkele rij.

Er zijn maar heel weinig artikelen op internet die het in detail proberen uit te leggen, aangezien de code eigenlijk een uitleg op zich is.




  1. Converteer Datetime-kolom van UTC naar lokale tijd in select-statement

  2. MySql-veldgrootte voor het opslaan van de hoofdtekst van e-mail

  3. Krijg het totale tijdsinterval van meerdere rijen als de reeks niet wordt verbroken

  4. LEAST() Functie in Oracle