web-dev-qa-db-ja.com

SQLを使用して個々のXMLノードを選択する

多くのノードを持つ大きなXMLノートがあります。

より大きなXMLから単一のノードとそのすべてのコンテンツのみを選択できる方法はありますか?

sQL 2005を使用しています

14
kacalapy

XMLの一部を取得する場合は、 query()メソッド を使用する必要があります。

declare @XML xml

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

select @XML.query('/root/row2')

結果:

<row2>
  <value>2</value>
</row2>

特定のノードからの値が必要な場合は、 value()メソッド を使用する必要があります。

select @XML.value('(/root/row2/value)[1]', 'int')

結果:

2

更新:

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)

結果:

(No column name)
1
2

XML全体を取得するには:

select T.N.query('.')
from @XML.nodes('/root/row') as T(N)

結果:

(No column name)
<row><value>1</value></row>
<row><value>2</value></row>
30
Mikael Eriksson