2009-11-13 17 views
10

का उपयोग कर XML कॉलम पर SQL क्वेरी फ़िल्टर करें मेरे पास एक एक्सएमएल कॉलम वाला टेबल है। मैं उन पंक्तियों को फ़िल्टर करना चाहता हूं जहां एक्सएमएल में एक विशिष्ट विशेषता एक स्ट्रिंग से मेल खाती है, अनिवार्य रूप से जहां कहीं भी हो रही है या है।XPath/XQuery

तालिका इस

| id | xml | 

की तरह कुछ और

<xml> 
    <info name="Foo"> 
    <data .../> 
    </info> 
<xml> 

करने के लिए XML कुछ इसी तरह मैं सभी आईडी जहां @name विशेषता एक मूल्य के मिलान किया प्राप्त करना चाहते हैं लग रहा है।

मैं निम्न कार्य करने में सक्षम है:

SELECT id, xml.query('data(/xml/info/@name)') as Value 
FROM Table1 
WHERE CAST(xml.query('data(/xml/info/@name)') as varchar(1024)) = @match 

लेकिन यह अविश्वसनीय रूप से धीमी है।

क्वेरी के आउटपुट पर फ़िल्टर करने का एक बेहतर तरीका होना चाहिए।

+0

यदि आपने ऐसा नहीं किया है, तो मैं भी अपने XML स्तंभों पर अनुक्रमित सुनिश्चित करें कि आप मिल गया है करने का सुझाव देते चाहते हैं। > [एक्सएमएल इंडेक्स अवलोकन (SQLServerPedia.com)] (http://sqlserverpedia.com/wiki/XML_Indexes_Overview) – Kev

उत्तर

20

इसे मिला। क्वेरी() का उपयोग करने के बजाय मुझे exist() का उपयोग करना चाहिए।

मेरे प्रश्न तो होगा

SELECT id, xml.query('data(/xml/info/@name)') as Value 
FROM Table1 
WHERE xml.exist('/xml/info/[@name=sql:variable("@match")]') = 1 

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

  • कोई संबंधित समस्या नहीं^_^