2012-05-09 9 views
0

Просто похоже другой пост, мне нужно, чтобы извлечь все строки из таблицы, применяя критерии на колонке Xml, например, предположим, что у вас есть столбец XML, как это:SQL Server - XQuery для XML

<DynamicProfile xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WinTest"> 
    <AllData xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <d2p1:KeyValueOfstringstring> 
     <d2p1:Key>One</d2p1:Key> 
     <d2p1:Value>1</d2p1:Value> 
    </d2p1:KeyValueOfstringstring> 
    <d2p1:KeyValueOfstringstring> 
     <d2p1:Key>Two</d2p1:Key> 
     <d2p1:Value>2</d2p1:Value> 
    </d2p1:KeyValueOfstringstring> 
    </AllData> 
</DynamicProfile> 

Мой запрос будет иметь возможность возвращать все строки, где значение узла <d2p1:Key> = 'some key value' И значение узла <d2p1Value = 'some value value'.

Представьте, что это как динамическая таблица, где узел KEY представляет имя столбца и узел Value представляют значение столбца.

Следующий запрос не работает, потому что ключ и значение узлы не являются последовательными:

select * from MyTable where 
MyXmlField.exist('//d2p1:Key[.="One"]') = 1 
AND MyXmlField.exist('//d2p1:Value[.="1"]') = 1 

ответ

2

Вместо того, чтобы искать //d2p1:key[.="One"] и //d2p1:Value[.="1"] как два отдельных запросов, сделать один запрос, который ищет как сразу, как так:

//d2p1:KeyValueOfstringstring[./d2p1:Key="One"][./d2p1:Value=1]

+0

О да! Он отлично работает! Большое спасибо – bit

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