mardi 4 août 2009

Transformer des records en liste (comma separated)

Le script suivant montre comment utiliser l'instruction FOR XML PATH de Sql serveur 2005 pour produire une liste (comma separated) à partir d'un ensemble d'enregistrement.
La puissance de la syntaxe permettant même d'effectuer cette opération pour chacun des enregistrements d'une autre table/sélection.

Un concept vaguement comparable aux "nested tables" d'ADO et bigrement utile pour du reporting :-)

select top 5 usr.ID_User, 
  Left( usr.LoginName, 5 )+'****' as [Scrambled Login],
  ( 
    SELECT gList.GroupName +', ' as [text()]
    from tblSSlnkGtoU gtouList
    left join tblSSGroups gList 
        on gList.ID_Group = gtouList.ID_Group
    where gtouList.ID_User = usr.ID_User
    Order by glist.GroupName
    FOR XML PATH( '' )
   ) as [Scrambled GroupList]
  
FROM tblSSUsers usr 
where usr.ID_User &gt 100

Voici l'exemple issus de l'article d'Anatoly Lubarsky (voir référence ci-dessous).
SELECT CustomerID
      ,(SELECT CAST(OrderID AS VARCHAR(MAX)) + ',' AS [text()]
          FROM dbo.Orders AS O
         WHERE O.CustomerID = C.CustomerID
         ORDER BY OrderID
           FOR XML PATH('')) AS Orders
  FROM dbo.Customers AS C;

sources: 

Aucun commentaire: