从连接两个表的查询输出SQL Server“FOR XML”

时间:2013-02-05 22:14:44

标签: sql sql-server xml xsd

我是SQL Server中“FOR XML”功能的新手。我正在使用SQL Server 2012。

我有两个表,Word和Word_Expansion。

示例数据:

表[Word]:

WordOID   Word
-------   ----    
      1   PIPE
      2   WIRE

表[Word_Expansion]:

WEOID  fk_WordOID  Word_Expansion
-----  ----------  --------------
    1          2             COAX
    2          2    SPEAKER CABLE
    3          1          CONDUIT

现在,我想生成类似以下内容的XML:

<expansion>
  <sub>WIRE</sub>
  <sub>SPEAKER CABLE</sub>
</expansion>
<expansion>
  <sub>PIPE</sub>
  <sub>CONDUIT</sub>
</expansion>

我已经接近制作XML FOR语句的各种努力,但我似乎无法理解我需要做什么才能将这两个表混合到正确的XML输出中。我将进一步深入研究XML FOR语法,但如果你有时间并且知道这一点......

有没有人对我应该尝试什么有任何指示?

2 个答案:

答案 0 :(得分:3)

这应该适合你:

<强> SQL:

SELECT Word Sub,      
        (      
             SELECT Word_Expansion  AS Sub   
             FROM Word_Expansion WE
             WHERE WE.fk_WordOID = W.WordOID 
             FOR XML PATH(''), type 
        )      
FROM Word W
FOR XML PATH ('Expansion')   

XML输出:

<Expansion>
  <Sub>Pipe</Sub>
  <Sub>CONDUIT</Sub>
</Expansion>
<Expansion>
  <Sub>Wire</Sub>
  <Sub>COAX</Sub>
  <Sub>SPEAKER CABLE</Sub>
</Expansion>

虽然我不确定你为什么要将Word.Word归类为“Sub”? 这不应该是Word_Expansion的父级(应该是sub?)

编辑:在查看FOR XML和嵌套查询Nested FOR XML

时,我发现此链接非常有用

答案 1 :(得分:1)

这是我的...我赞成了第一篇文章,因为他的速度最快,但它确实有点不同所以我认为添加我的不会有什么伤害......

With    groupedWords
As
(
        Select  WordOID, 
                Word
        From    Word
        Union   
        Select  fk_WordOID, Word_Expansion
        From    Word_Expansion
)
Select (Select  s.word As sub 
        From    groupedWords s 
        Where   s.WordOID = n.WordOID 
        For     Xml Path(''), Type)
From    groupedWords n
Group   By n.WordOID
For     Xml Path('expansion')