TSQL: Como posso fazer uma auto-se juntar em XML para obter um documento aninhada?
-
03-07-2019 - |
Pergunta
Eu tenho uma tabela SQL Server 2005 como isto:
create table Taxonomy(
CategoryId integer primary key,
ParentCategoryId integer references Taxonomy(CategoryId),
CategoryDescription varchar(50)
)
com os dados parecendo
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>
É possível fazer isso com FOR XML AUTO, elementos? Ou eu preciso usar FOR XML EXPLICIT?
Solução
É possível, mas a principal limitação é que os níveis da hierarquia deve ser codificado. O Books Online SQL Server tem uma descrição de como representar hierarquias em XML em este link . Abaixo está uma consulta de exemplo que produz o XML que você solicitou:
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')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow