选择XML节点,从嵌套元素构建表

时间:2011-03-19 08:11:09

标签: sql xml tsql xpath

我有一个来自其他系统的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?

1 个答案:

答案 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

的帮助下