2017-03-09 3 views
1

J'ai le XML ci-dessous dans une colonne. J'ai besoin d'accéder à \ Report \ Criterias \ Criteria (où name = "Annonceurs") \ Elements \ Element (où name = "ListViewAvailable"). De là, je dois énumérer tous les nombres qui sont dans l'élément Value.Comment obtenir des valeurs d'éléments à partir d'une colonne XML?

Jusqu'à présent, je suis arrivé:

SELECT xmlColumn.query('/Report/Criterias/Criteria/Elements/Element') 
from tbl 

mais aucune idée comment filtrer.

<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>  

Répondre

2

Vous pouvez filtrer à l'aide prédicat ([]) en combinaison avec CROSS APPLY pour déchiqueter le XML sur Value éléments Niveau:

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)