मान लें कि आप एक्सएमएल के भीतर एक आईडी पर फ़िल्टर करने का प्रयास कर रहे हैं, आपको सिंटैक्स के साथ कोई समस्या है, आपने रूट नोड को गतिविधि के बजाय गतिविधि आईडी के रूप में आपूर्ति की है, आप आईडी नोड पर नहीं जा रहे हैं, आप दुरुपयोग कर रहे हैं contains
- और वह शायद वैसे भी नहीं है जो आप चाहते हैं; और आप नाम स्थान को अनदेखा कर रहे हैं।
यह केवल उन पंक्तियों को खोजेगा जहाँ XML की एक विशिष्ट आईडी है:
SELECT * from activity
where ExtractValue(xml,
'/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID/text()',
'xmlns="urn:astrazeneca:na:Activity:domain:3" xmlns:ns2="urn:astrazeneca:na:CommonTypes:domain:2"'
) = 10669;
लेकिन ExtractValue लंबे समय से बहिष्कृत कर दिया गया है, इसलिए आपको इसके बजाय XMLQuery का उपयोग करना चाहिए। या इस संदर्भ में XMLExists का उपयोग करने के लिए शायद अधिक समझदारी होगी, उस मूल्य के साथ जिसे आप एम्बेड करना चाहते हैं:
SELECT * from activity
where XMLExists('
declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=10669]
'
passing xml
);
या शायद अधिक उपयोगी रूप से एक तर्क के रूप में आपूर्ति की गई:
SELECT * from activity
where XMLExists('
declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=$id]
'
passing xml, 10669 as "id"
);
यदि आप मिलान वाली पंक्तियों में XML से विशिष्ट डेटा निकालना चाहते हैं तो XMLQuery या XMLTable देखें - लेकिन यह एक अलग मुद्दा है।