2012-01-03 2 views

ответ

24

Вы должны использовать query() Method, если вы хотите, чтобы получить часть вашего 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() Method.

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

Результат:

2 

Update:

Если вы хотите, чтобы кромсать ваш XML в несколько строк, которые вы используете nodes() Method.

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

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> 
+0

приятно, что, если каждый из узлов строки был только , и я хотел получить каждый узел строки последовательно? – kacalapy

+0

Я хочу, чтобы результаты () не целое число, но я хочу получить row1 xml chunk, а затем row2 ... для всех строк – kacalapy

+0

@kacalapy - Обновлен ответ на то, как вы отбросили XML до нескольких строк. –