我在下面的列中有XML。我需要到\ Report \ Criterias \ Criteria(其中name =" Advertisers")\ Elements \ Element(其中name =" ListViewAvailable")。从这里我需要列出Value元素中的所有数字。
到目前为止,我得到了:
SELECT xmlColumn.query('/Report/Criterias/Criteria/Elements/Element')
from tbl
但不知道如何过滤。
<Report>
<Criterias>
<Criteria name="Date Range">
...
</Criteria>
<Criteria name="Advertisers">
<Elements>
<Element name="CheckBoxOne">
<Value>0</Value>
</Element>
<Element name="ListViewAvailable">
<Value>314</Value>
<Value>57</Value>
<Value>18886</Value>
<Value>7437</Value>
</Element>
</Elements>
</Criteria>
<Criteria name="Revenue Types">
...
</Criteria>
</Criterias>
</Report>
答案 0 :(得分:2)
您可以使用谓词([]
)与CROSS APPLY
结合使用来过滤Value
元素级别的XML:
SELECT C.value('.', 'int') AS Value
FROM tbl t
CROSS APPLY t.xmlColumn.nodes('
/Report/Criterias/Criteria[@name="Advertisers"]
/Elements/Element[@name="ListViewAvailable"]
/Value
') T(C)