2013-08-16 6 views
5

क्वेरी करने के लिए एसक्यूएल का उपयोग करना मुझे SQL सर्वर 2012 डेटाबेस में संग्रहीत XML डेटा से पूछताछ करने में समस्याएं आ रही हैं। नोड ट्री मैं क्वेरी करना चाहते हैं निम्नलिखित प्रारूप में है -एक्सएमएल डेटा कॉलम

<eForm> 
    <page id="equalities" visited="true" complete="true"> 
     <Belief> 
     <item selected="True" value="Christian">Christian</item> 
     <item selected="False" value="Jewish">Jewish</item> 
     ... 
     </Belief> 
    </page> 
</eForm> 

मैं करना चाहते हैं क्या आइटम नोड जहां चयनित विशेषता सच के बराबर है का मान विशेषता वापसी है। मैंने एसक्यूएल में एक्सएमएल पूछताछ पर कई ट्यूटोरियल पढ़े हैं लेकिन कोड सही नहीं लग रहा है।

धन्यवाद स्टू

उत्तर

4

DEMO

SELECT [value].query('data(eForm/page/Belief/item[@selected="True"]/@value)') 
FROM test 
+0

धन्यवाद, मैं डेटा() – StuartO

+1

एक छोटा सा ध्यान दें, इस प्रकार एक्सएमएल होगा और VARCHAR नहीं –

+0

http://sqlfiddle.com/# देखने में XPath लपेटकर नहीं कर रहा था! 6/ddaf2/2 –

0
DECLARE @T TABLE (X XML); 
INSERT @T VALUES ('<eForm> 
         <page id="equalities" visited="true" complete="true"> 
          <Belief> 
          <item selected="True" value="Christian">Christian</item> 
          <item selected="False" value="Jewish">Jewish</item> 
          </Belief> 
         </page> 
        </eForm>') 

SELECT item.value('item[1]', 'NVARCHAR(50)')  
FROM @T 
     CROSS APPLY X.nodes('eForm/page/Belief') i (item) 
WHERE item.value('(item[1]/@selected)[1]', 'VARCHAR(5)') = 'true'; 

N.B.

मैं वास्तव में मार्किन जुरासजेक द्वारा पोस्ट किए गए अन्य दृष्टिकोण को प्राथमिकता देता हूं, हालांकि अगर आपको निकालने के लिए और डेटा की आवश्यकता होती है तो नीचे दिए गए फायदे हो सकते हैं। मैंने मूल रूप से उत्तर हटा दिया लेकिन ऐसी स्थितियां हो सकती हैं जहां यह दृष्टिकोण उपयोगी है ताकि सभी विकल्पों को प्रदर्शित करने के हित में मैंने छोड़ा हो।

1
select 
    Value.value('(eForm/page/Belief/item[@selected="True"])[1]/@value', 'nvarchar(max)')  
from test 

sql fiddle demo

संबंधित मुद्दे