使用SQL选择单个xml节点

kac*_*apy 13 sql-server sql-server-2005 xquery-sql

我有一个包含许多节点的大型XML注释.

有没有一种方法可以从较大的XML中只选择一个节点及其所有内容?

我正在使用sql 2005

Mik*_*son 30

如果要获取XML的一部分,则应使用query()方法.

declare @XML xml

set @XML = 
'
<root>
  <row1>
    <value>1</value>
  </row1>
  <row2>
    <value>2</value>
  </row2>
</root>
'

select @XML.query('/root/row2')
Run Code Online (Sandbox Code Playgroud)

结果:

<row2>
  <value>2</value>
</row2>
Run Code Online (Sandbox Code Playgroud)

如果需要特定节点的值,则应使用value()方法.

select @XML.value('(/root/row2/value)[1]', 'int')
Run Code Online (Sandbox Code Playgroud)

结果:

2
Run Code Online (Sandbox Code Playgroud)

更新:

如果要将XML分解为多行,可以使用nodes()方法.

要获得价值:

declare @XML xml

set @XML = 
'
<root>
  <row>
    <value>1</value>
  </row>
  <row>
    <value>2</value>
  </row>
</root>
'

select T.N.value('value[1]', 'int')
from @XML.nodes('/root/row') as T(N)
Run Code Online (Sandbox Code Playgroud)

结果:

(No column name)
1
2
Run Code Online (Sandbox Code Playgroud)

要获取整个XML:

select T.N.query('.')
from @XML.nodes('/root/row') as T(N)
Run Code Online (Sandbox Code Playgroud)

结果:

(No column name)
<row><value>1</value></row>
<row><value>2</value></row>
Run Code Online (Sandbox Code Playgroud)