2010-06-24 13 views
7

मान लिया जाये कि मैं एक xml निम्न मान वाले कॉलम के साथ एक SQL सर्वर 2005 तालिका है:एसक्यूएल सर्वर एक्सएमएल कॉलम मौजूद हैं() क्वेरी

CREATE TABLE XmlTest (
    XMLid int, 
    Data xml) 

INSERT XMLTest 
VALUES (1 , '<data><item><type v="1" /><value v="12.56" /></item><item><type  v="3" /><value v="DEBIT" /></item></data>') 

INSERT XMLTest 
VALUES (2 , '<data><item><type v="1" /><value v="99.22" /></item><item><type v="3" /><value v="CREDIT" /></item></data>') 

INSERT XMLTest 
VALUES (3 , '<data><item><type v="3" /><value v="12.56" /></item><item><type v="1" /><value v="DEBIT" /></item></data>') 

मैं एक प्रकार वी के साथ आइटम तत्वों के अस्तित्व के लिए परीक्षण करना चाहते हैं = "3" और एक मान v = "डेबिट"।

मैं अस्तित्व() फ़ंक्शन का उपयोग कर रहा इस प्रकार है:

SELECT * 
FROM XmlTest 
WHERE Data.exist('/data/item/type[@v=''3'']') = 1 
AND Data.exist('/data/item/value[@v=''DEBIT'']') = 1 

हालांकि यह मेरे XMLid 1 के साथ लाता है वापस पंक्तियों और 3.

किसी की रूपरेखा तैयार कर सकते हैं क्या परिवर्तन मैं करने के लिए बनाने की जरूरत है मेरी कहां क्लॉज केवल रिकॉर्ड लौटने के लिए जिसमें एक आइटम है जहां टाइप नोड वी मान 3 है और मान नोड वी मान "डेबिट" है? यानी केवल XMLid 1

साथ

धन्यवाद

उत्तर

7

रिकॉर्ड इस प्रयास करें:

SELECT * 
FROM XmlTest 
WHERE Data.exist('/data/item[type[@v=''3''] and value[@v=''DEBIT'']]') = 1 
+1

+1 रफ़ू! मैं थोड़ी सी शोध के बाद बस इस समाधान के साथ आया .... केवल यह पता लगाने के लिए कि आप 6 मिनट तेज हैं ..... ARGH! :-) अच्छा कॉल, यद्यपि! –

+1

बिल्कुल सही। आपकी सहायता के लिए धन्यवाद मैट और मार्क_एस। – doshea

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