выбор отдельного узла xml с использованием SQL - PullRequest
12 голосов
/ 04 января 2012

У меня есть большая заметка XML со многими узлами.

Есть ли способ, которым я могу выбрать только один узел и все его содержимое из большего XML?

Я использую SQL 2005

1 Ответ

28 голосов
/ 04 января 2012

Вам следует использовать метод query () , если вы хотите получить часть вашего XML.

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 на несколько строк, вы используете node () Метод .

Чтобы получить значения:

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>
...