2012-12-20 6 views
5

mam pole „metadane” w tabeli „dokument”, który ma następujące dane:Where na filtrowanie kolumny XML SQL Server na atrybut i wartość

<properties> 
    <property name="someProp">xyz</property> 
    <property name="reportId">55</property> 
    <property name="someOtherProp">abc</property> 
</properties>' 

Jak mogę napisać kwerendę, która zwraca rekordy gdzie istnieje element property o nazwie "reportId", a element "reportId" ma wartość 55? Czasami węzeł właściwości "reportId" jest jedynym, który istnieje, czasami nie, i nie zawsze jest w powyższej kolejności, więc nie mogę zapytać o bezwzględne pozycje. Jakieś pomysły?

Odpowiedz

2

Nieważne, rozumiem. Dla odniesienia:

select * from Document 
where Metadata.value('(/properties/property[@name="reportId"])[1]', 'int') = 55 
5

Nie ma potrzeby wyodrębniania wartości. Zamiast tego użyj exist() Method (xml Data Type).

select * 
from Document 
where Metadata.exist('/properties/property[@name="reportId" and . = 55]') = 1 
Powiązane problemy