Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Aktualisierung des übergeordneten Tabellenfelds basierend auf mehreren untergeordneten Tabellenzeilen

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

Ich habe Ihr SQLFiddle aktualisiert mit der Lösung.

  1. STUFF() Funktion zum Entfernen des führenden ',' (Komma) vom ersten Merkmal.

  2. FÜR XML um ein XML-Dokument aus einem Abfrageergebnis zu erstellen. Dies ist ein bekannter Trick bei SQL Server – da die Spalte nicht benannt ist, wird kein Element erzeugt und nur der Rohtext (jeder Zeile) wird ausgegeben, zusammengefügt zu einer einzigen Zeile.

Sehr wenige Artikel im Internet versuchen, es im Detail zu erklären, da der Code so ziemlich als Erklärung an und für sich selbst übrig bleibt.