我是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语法,但如果你有时间并且知道这一点......
有没有人对我应该尝试什么有任何指示?
答案 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')