2011-02-18 71 views
1

我嘗試了一個FOR XML查詢,類似於在字幕'FOR XML表達式嵌套'下顯示的here。我的問題是我必須有三個XML元素級別。結果應該是這樣的。嵌套的FOR 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 > 

任何想法?

回答

0

使用此查詢:

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 
+0

是啊,只要我添加相同的WHERE子句的最後選擇,以及工程。不知道ORBER BY對XML形狀的影響。非常感謝。 - 盧比奧 – Rubio 2011-02-18 10:42:53