TSQL: ¿Cómo puedo unirme automáticamente en XML para obtener un documento anidado?
-
03-07-2019 - |
Pregunta
Tengo una tabla de SQL Server 2005 como esta:
create table Taxonomy(
CategoryId integer primary key,
ParentCategoryId integer references Taxonomy(CategoryId),
CategoryDescription varchar(50)
)
con datos que parecen
CategoryIdParentCategoryIdCategoryDescription
123nullfoo345123bar
Me gustaría consultarlo en un documento xml como este:
<taxonomy>
<category categoryid="123" categorydescription="foo">
<category id="455" categorydescription="bar"/>
</category>
</taxonomy>
¿Es posible hacer esto con FOR XML AUTO, ELEMENTS? ¿O debo utilizar FOR EXPLICIT XML?
Solución
Es posible, pero la principal limitación es que los niveles de la jerarquía deben estar codificados. Los Libros en pantalla de SQL Server tienen una descripción de cómo representar jerarquías en XML en este enlace . A continuación se muestra una consulta de muestra que produce el XML que solicitó:
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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow