TSQL:Как мне выполнить самосоединение в XML, чтобы получить вложенный документ?

StackOverflow https://stackoverflow.com/questions/160374

Вопрос

У меня есть таблица SQL Server 2005, подобная этой:

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, ELEMENTS?Или мне нужно использовать FOR XML ЯВНО?

Это было полезно?

Решение

Это возможно, но главное ограничение заключается в том, что уровни иерархии должны быть жестко запрограммированы.В онлайн-книгах по SQL Server есть описание того, как представлять иерархии в XML по адресу эта ссылка.Ниже приведен пример запроса, который выдает запрошенный вами 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')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top