我有一个来自其他系统的xml字符串,我需要选择xml作为sql中的表
<jrt>
<item>
<id>cell1</id>
<id>cell2</id>
<id>cell3</id>
</item>
<item>
<id>cell4</id>
<id>cell5</id>
<id>cell6</id>
</item>
</jrt>
结果应该是:
row value
----------- -----
1 cell1
2 cell2
3 cell3
1 cell4
2 cell5
3 cell6
注意:行号是每个项目的id位置
请帮我看看如何使用tsql选择这个xml?
答案 0 :(得分:2)
declare @xml xml set @xml = '
<jrt>
<item>
<id>cell1</id>
<id>cell12</id>
<id>cell83</id>
</item>
<item>
<id>cell4</id>
<id>cell5</id>
<id>cell6</id>
</item>
</jrt>'
SELECT item.number itemrow,
id.number idrow,
o.c.value('.', 'nvarchar(max)') value
FROM master..spt_values item
inner join master..spt_values id on id.type='P' and id.number >= 1
CROSS APPLY @xml.nodes('/jrt/item[sql:column("item.number")]') n(c)
CROSS APPLY n.c.nodes('id[sql:column("id.number")]') o(c)
where item.type='P' and item.number >= 1
ORDER BY itemrow, idrow
在https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=383888
的帮助下