sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Update Parent Table Field baserat på flera underordnade tabellrader

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

Jag har uppdaterat din SQLFiddle med lösningen.

  1. STUFF() funktion för att ta bort den inledande ',' (komma) från den första egenskapen.

  2. FÖR XML för att skapa ett XML-dokument från ett frågeresultat. Detta är ett välkänt knep med SQL Server - eftersom kolumnen inte är namngiven, det skapas inget element och endast den råa texten (för varje rad) matas ut, blandad till en enda rad.

Väldigt få artiklar på internet försöker förklara det i detalj, eftersom koden i stort sett lämnas som en förklaring i sig.




  1. ALTER &DROP Table DDL med Execute Immediate i Oracle Database

  2. mySQL lägger till kolumnbrytningsdata

  3. Lagra och fråga efter intervallträd i PostgreSQL

  4. Jag vill ha ett utvalt frågeresultat i tabellformat som en sammanfattningsrapport