Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Champ de table parent de mise à jour SQL basé sur plusieurs lignes de table enfant

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

J'ai mis à jour votre SQLFiddle avec la solution.

  1. STUFF() fonction pour supprimer le premier ',' (virgule) à partir de la première caractéristique.

  2. POUR XML pour créer un document XML à partir d'un résultat de requête. C'est une astuce bien connue avec SQL Server - parce que la colonne n'est pas nommée, il n'y a pas d'élément produit et seul le texte brut (de chaque ligne) est sorti, écrasé en une seule ligne.

Très peu d'articles sur Internet tentent de l'expliquer en détail, car le code est à peu près laissé comme une explication en soi.