Вложенность выражений FOR XML - PullRequest
1 голос
/ 18 февраля 2011

Я попытался выполнить запрос FOR XML, аналогичный показанному здесь под подзаголовком «Вложение выражений FOR XML» Моя проблема в том, что у меня должно быть три уровня элементов XML. Результаты должны быть примерно такими.

<StepTree Name="ALFKI">
  <Step Name="Foo">
    <Result id="123" />
    <Result id="456" />
  </Step>
  <Step Name="Bar">
    <Result id="789" />
    <Result id="987" />
  </Step>
</StepTree >

Я пробовал этот тип запроса.

SELECT 1 as TAG,
       NULL as Parent,
       StepTrees.Name AS [StepTree!1!Name],
       NULL as [Step!2!Name],
       NULL as [Result!3!id]
FROM StepTrees
WHERE StepTrees.Name = 'ALFKI' 
UNION ALL
SELECT 2,
       1,
       StepTrees.Name,
       Steps.Name,
       NULL
FROM Steps
JOIN StepTrees ON Steps.StepTreeId = StepTrees.Id
WHERE StepTrees.Name = 'ALFKI' 
UNION ALL
SELECT DISTINCT 3,
       2,
       StepTrees.Name,
       Steps.Name,
       Results.id
FROM StepTrees
JOIN Steps ON Steps.StepTreeId = StepTrees.Id
JOIN Results ON Steps.StepId = Results.StepId
FOR XML EXPLICIT

Полученный XML выглядит следующим образом.

<StepTree Name="ALFKI">
  <Step Name="Foo" />
  <Step Name="Bar">
    <Result id="123" />
    <Result id="456" />
    <Result id="789" />
    <Result id="987" />
  </Step>
</StepTree >

Есть идеи?

1 Ответ

0 голосов
/ 18 февраля 2011

Используйте этот запрос:

SELECT 1 as TAG,
   NULL as Parent,
   StepTrees.Name AS [StepTree!1!Name],
   NULL as [Step!2!Name],
   NULL as [Result!3!id]
FROM StepTrees
WHERE StepTrees.Name = 'ALFKI' 
UNION ALL
SELECT 2,
       1,
       Null,
       Steps.Name,
       NULL
FROM Steps
JOIN StepTrees ON Steps.StepTreeId = StepTrees.Id
WHERE StepTrees.Name = 'ALFKI' 
UNION ALL
SELECT DISTINCT 3,
       2,
       Null,
       Steps.Name,
       Results.id
FROM StepTrees
JOIN Steps ON Steps.StepTreeId = StepTrees.Id
JOIN Results ON Steps.StepId = Results.StepId
ORDER BY [Step!2!Name],[Result!3!id]
FOR XML EXPLICIT
...