TSQL: come si effettua un auto-join in XML per ottenere un documento nidificato?
-
03-07-2019 - |
Domanda
Ho una tabella di SQL Server 2005 come questa:
create table Taxonomy(
CategoryId integer primary key,
ParentCategoryId integer references Taxonomy(CategoryId),
CategoryDescription varchar(50)
)
con i dati che sembrano
CategoryIdParentCategoryIdCategoryDescription
123nullfoo345123bar
Vorrei interrogarlo in un documento XML come questo:
<taxonomy>
<category categoryid="123" categorydescription="foo">
<category id="455" categorydescription="bar"/>
</category>
</taxonomy>
È possibile farlo con FOR XML AUTO, ELEMENTS? O devo usare FOR XML EXPLICIT?
Soluzione
È possibile ma il limite principale è che i livelli della gerarchia devono essere codificati. La documentazione in linea di SQL Server contiene una descrizione di come rappresentare le gerarchie in XML in questo link . Di seguito è una query di esempio che produce l'XML richiesto:
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')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow