2013-10-03 2 views
1

Я выбираю данные из XML-документа, однако мне нужно прокрутить каждый дочерний узел, чтобы выполнить некоторые действия над ними.SQL Выберите узлы XML, введите номер узла параметрирования

В настоящее время у меня есть цикл while вокруг select, но не знаю, как параметризовать номер узла.

Я понимаю, что нижеследующее не так, но было бы признательно, если бы кто-то мог указать лучший способ параметризации выбора узла.

Спасибо.

DECLARE @nodeCount varchar(1) = '1' 
WHILE EXISTS (SELECT table.value('(Info/Data/DataInfo/Type/node())[' + @nodeCount + ']', 'nvarchar(10)') from table) 

XML, заключается в следующем:

<Info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Data> 
<DataInfo> 
    <Description>11111111111</Description>  
    <Type>1</Type> 
</DataInfo> 
<DataInfo> 
    <Description>2222222222222</Description>  
    <Type>2</Type> 
</DataInfo> 
<DataInfo> 
    <Description>3333333333333</Description>  
    <Type>3</Type> 
</DataInfo> 
</Data> 
</Info> 
+0

Можете ли вы показать нам образец этого XML? Как это выглядит, и что вы пытаетесь сделать на этих узлах XML? –

+0

XML был опубликован выше. Мне просто нужен способ получить данные от каждого узла по отдельности. Я могу выбрать узел, пройдя число, но нужно сделать его динамическим. – JIbber4568

+0

Можете ли вы использовать что-то вроде 'table.nodes ('/ Info/Data/DataInfo')' и перебирать этот список узлов XML, которые вы возвращаете? –

ответ

2

вы можете получить все данные одним запросом с nodes() функции:

select 
    t.c.value('(text())[1]', 'nvarchar(10)') as [Type] 
from @xml.nodes('/Info/Data/DataInfo/Type') as t(c) 

sql fiddle demo

Или, если вы действительно хотите, чтобы петли, вы можете использовать функцию расширения sql:variable():

DECLARE @nodeCount int = 1 
WHILE EXISTS (SELECT table.value('(Info/Data/DataInfo/Type/node())[sql:variable("@nodeCount")][1]', 'nvarchar(10)') from table) 

sql fiddle demo

+0

Отлично! Только то, что я искал. Благодарю. – JIbber4568

Смежные вопросы