CTE и иерархический результат XML - PullRequest
1 голос
/ 22 октября 2010

Hei

У меня есть простой CTE, который приводит к иерархическому списку элементов (отношение Родитель / Ребенок). Как я могу преобразовать его в XML с синтаксисом sql "FOR XML", сохранив иерархическую структуру?

Спасибо, Espen

1 Ответ

0 голосов
/ 22 октября 2010

Чтобы построить иерархию, вам нужно «сложить» запрос таким образом, чтобы имитировать иерархию, которую вы пытаетесь построить. Если вы используете только одну таблицу или CTE для создания своего XML, вам нужно попытаться выделить «родительские» элементы в вызовах sql. Посмотрите, как я использовал разные при выборе родителя ниже

Пример:

use tempdb
GO
IF OBJECT_ID('tempdb..#ParentChild')IS NOT NULL DROP TABLE #ParentChild
CREATE TABLE #ParentChild(
ID              int identity(1,1),
ParentID        int,
ParentName      varchar(25),
ChildName       varchar(25));

Insert Into #ParentChild
Values(1,'John','Mike');

Insert Into #ParentChild
Values(1,'John','Russ');

Insert Into #ParentChild
Values(1,'John','Stan');

Select 
    pc.ParentName AS '@parent',
    (Select 
        p.ChildName as '@child'
     From #ParentChild p
     Where p.ParentID = pc.ParentID
     FOR XML PATH('children'),TYPE)
From (Select Distinct ParentID,ParentName
      From #ParentChild) pc
FOR XML PATH('parent'),TYPE

DROP TABLE #ParentChild;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...