2014-10-08 5 views
1

У меня есть XML-структуру, какВыбор отдельного узла XML с условием в SQL

<root> 
<row> 
    <value>1</value> 
</row> 
<row> 
<value>2</value> 
</row> 
</root> 

Я хочу, чтобы получить <row> где <value> = 2. Является ли это возможным? Любой пример?

Чтобы быть более точным структура XML, как это

<root> 
<row> 
    <value>1</value> 
</row> 
<root> 
    <row> 
    <value>2</value> 
    </row> 
</root> 
</root> 
+0

Обновленное структура XML не очень хорошо отформатированный ... и вы можете также использовать '@x.nodes ('/ roots/root/row') a (b) ', если я предполагаю, что есть корни всех корней –

+0

Обновленный XML. Нет. У меня нет корня всех корней. – Garima

+0

Это проводная структура xml. Ваш первый узел '' находится под корнем, а ваш второй '' находится под '' от root. –

ответ

4

Sure:

declare @x xml = '<root> 
<row> 
    <value>1</value> 
</row> 
<row> 
<value>2</value> 
</row> 
</root>'; 

select @x.query('/root[1]/row[./value/text()="2"]'); 
+0

Спасибо, Роджер. Не могли бы вы также объяснить это. Почему root [1]? – Garima

+0

@Garima, «1» в квадратных скобках означает «первый экземпляр элемента». Это не имеет никакого значения в вашем примере, но вы можете получить более высокую производительность с большим XML. –

+0

Спасибо @Roger. Моя ошибка, я сделал неправильный xml. Обновленный мой вопрос с правильным. Не могли бы вы сейчас ответить. Извините, что я новичок в этом – Garima