Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Campo della tabella padre di aggiornamento SQL basato su più righe della tabella figlio

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

Ho aggiornato il tuo SQLFiddle con la soluzione.

  1. STUFF() funzione per rimuovere il ',' iniziale (virgola) dalla prima caratteristica.

  2. PER XML per creare un documento XML da un risultato di query. Questo è un trucco ben noto con SQL Server:poiché la colonna non è denominata, non viene prodotto alcun elemento e viene emesso solo il testo non elaborato (di ogni riga), unito in un'unica riga.

Pochissimi articoli su Internet tentano di spiegarlo in dettaglio, dal momento che il codice è praticamente lasciato come una spiegazione in sé e per sé.