Wie bekommst du einen Knoten, der einen untergeordneten Knoten mit einem gegebenen Attributwert in einem XML-Dokument mit SQL server enthält?

Ich arbeite an dem Analysieren von XML-Dokumenten mit SQL server 2008. Ich bin ein kompletter Noob und ich frage mich, ob ich Hilfe von euch bekommen kann.

Ich habe ein XML-Dokument wie das unten und ich möchte den "Abschnitt" Knoten, wo der "Code" Knoten hat val = 5.

<root> <section> <code val=6 /> ... </section> <section> <code val=5 /> ... </section> <section> <code val=4 /> ... </section> </root> 

So sollte das Ergebnis sein: <section> <code val=5 /> ... </section>

Ich habe versucht, dies zu tun, aber es hat nicht funktioniert:

select @xml.query('/root/section') where @xml.value('/root/section/code/@val,'int')= '5'

Ich habe auch versucht: select @xml.query('/root/section') where @xml.exist('/root[1]/section[1]/code[@val="1"])= '1'

Irgendwelche Ideen? Danke im Voraus.

Sie könnten diese Abfrage verwenden:

 DECLARE @x XML=N' <root> <section atr="A"> <code val="5" /> </section> <section atr="B"> <code val="6" /> </section> <section atr="C"> <code val="5" /> </section> </root>'; SELECT abquery('.') AS SectionAsXmlElement, abvalue('@atr','NVARCHAR(50)') AS SectionAtr FROM @x.nodes('/root/section[code/@val="5"]') a(b); 

Ergebnisse:

 SectionAsXmlElement SectionAtr ------------------------------------------- ---------- <section atr="A"><code val="5" /></section> A <section atr="C"><code val="5" /></section> C 

Anstatt where man die Einschränkung in einem XPath-Prädikat anwenden kann:

 @xml.query('/root/section[code/@val=5]')