3

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

我有两个表,Word 和 Word_Expansion。

样本数据:

表[字]:

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 语法,但如果您有时间并且非常了解这一点...

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

4

2 回答 2

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 的父级(应该是子级吗?)

编辑:我发现这个链接在查看 FOR XML 和嵌套查询Nested FOR XML时非常有用

于 2013-02-05T22:32:09.140 回答
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')
于 2013-02-05T22:50:33.563 回答