3 votes

TSQL : Comment faire un self-join en XML pour obtenir un document imbriqué ?

J'ai une table SQL Server 2005 comme celle-ci :

create table Taxonomy(
CategoryId integer primary key,
ParentCategoryId integer references Taxonomy(CategoryId),
CategoryDescription varchar(50) 
)

avec des données ressemblant à CategoryIdParentCategoryIdCategoryDescription 123nullfoo345123bar

`

I'd like to query it into an xml document like this:

`

<taxonomy>
<category categoryid="123" categorydescription="foo">
      <category id="455" categorydescription="bar"/>
</category>
</taxonomy>

Est-il possible de le faire avec FOR XML AUTO, ELEMENTS ? Ou dois-je utiliser FOR XML EXPLICIT ?

3voto

Sixto Saez Points 9582

C'est possible, mais la principale limitation est que les niveaux de la hiérarchie doivent être codés en dur. Les livres en ligne de SQL Server décrivent la manière de représenter les hiérarchies en XML à l'adresse suivante ce lien . Vous trouverez ci-dessous un exemple de requête qui produit le fichier XML que vous avez demandé :

SELECT [CategoryId] as "@CategoryID"
      ,[CategoryDescription] as "@CategoryDescription"
      ,(SELECT [CategoryId]
       ,[CategoryDescription]
       FROM [dbo].[Taxonomy] "Category"
       WHERE ParentCategoryId = rootQuery.CategoryId
       FOR XML AUTO, TYPE)
FROM [dbo].[Taxonomy] as rootQuery
where [ParentCategoryId] is null
FOR XML PATH('Category'), ROOT('Taxonomy')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X