2008-10-02 2 views
3

У меня есть SQL Server 2005 таблицу, как это:TSQL: Как сделать самостоятельное объединение в XML для получения вложенного документа?

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

с данными выглядит как CategoryIdParentCategoryIdCategoryDescription 123nullfoo345123bar

Я хотел бы запросить его в XML-документ, как это:

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

Возможно ли это сделать с FOR XML AUTO, ЭЛЕМЕНТЫ? Или мне нужно использовать FOR XML EXPLICIT?

ответ

3

Возможно, но основное ограничение заключается в том, что уровни иерархии должны быть жестко закодированы. В электронной документации по SQL Server описывается, как представлять иерархии в XML по адресу this link. Ниже приведен пример запроса, который производит запрашиваемый XML:

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')