1

我有一个存储在 .xml 中的表NVARCHAR。就是这样。

xml看起来像

<Container>
  <Data>
    <SomeNode>val1</SomeNode>
  </Data>
  <Data>
    <SomeNode>val2</SomeNode>
  </Data>
</Container>

基本上我需要从表中的所有 xml 字符串中查询所有 val1...valX。

到目前为止,我已经设法想出了

SELECT CAST(XmlColumn AS XML).query('//SomeNode') FROM ThatTableWithXmlInStrings 

这给了我节点列表的列表。在这里我迷路了:我如何将其扁平化为单个值?

4

2 回答 2

3
select T2.X.value('text()[1]', 'nvarchar(10)')
from ThatTableWithXmlInStrings
  cross apply (select cast(XmlColumn as xml)) T1(X)
  cross apply T1.X.nodes('/Container/Data/SomeNode') as T2(X)
于 2013-03-05T09:49:54.490 回答
0

有两种方法:

  1. 将 text() 函数添加到 xquery
  2. 使用节点方法链接
于 2013-03-05T09:20:57.033 回答