Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं SQL Server 2008 में किसी XML कॉलम में किसी मान को क्वेरी कैसे कर सकता हूं?

आपका एक्सएमएल डेटा अधूरा है - यह एक नाम स्थान उपसर्ग का उपयोग करता है ns0 इसे कहीं भी परिभाषित किए बिना... मैंने अपने नमूने में कुछ मनमाना, पूरी तरह से बना हुआ एक्सएमएल नेमस्पेस यहां जोड़ा है - आपको यह जांचना होगा कि आपके मामले में एक्सएमएल नेमस्पेस वास्तव में क्या है और तदनुसार नमूना अनुकूलित करें!

इसे आजमाएं:

DECLARE @InputTable TABLE (ID INT NOT NULL, XmlData XML)

INSERT INTO @InputTable(ID, XmlData) VALUES(42, '<?xml version="1.0" encoding="UTF-8" ?>
<ns0:Root xmlns:ns0="urn:some-sample-xml-namespace">
    <ns0:Result>
        <ns0:AStatus>Aaa</ns0:AStatus>
        <ns0:BStatus>Bbb</ns0:BStatus>
    </ns0:Result>
</ns0:Root>')

-- define the XML namespace to use     
;WITH XMLNAMESPACES('urn:some-sample-xml-namespace' AS x)
SELECT 
    ID,
    XC.value('(x:AStatus)[1]', 'varchar(50)') 
FROM    
    @inputtable
CROSS APPLY
    -- get a "pseudo" table of nodes <ns0:Root>/<ns0:Result>
    XmlData.nodes('x:Root/x:Result') AS XT(XC)

मूल रूप से, आपके पास एक परिभाषा . होनी चाहिए आपके एक्सएमएल नेमस्पेस प्रीफ़िक्स के लिए - और SELECT . में इस XML डेटा के विरुद्ध, आपके पास समान . होना चाहिए एक्सएमएल नेमस्पेस (भले ही - जैसा दिखाया गया है - उस नेमस्पेस को दिया गया उपसर्ग अलग हो सकता है - लेकिन नेमस्पेस मेल खाना चाहिए!)।

यह तब तालिका से डेटा का चयन करता है, और XML डेटा के लिए, यह .nodes() का उपयोग करता है XQuery इस XPath अभिव्यक्ति से मेल खाने वाले XML तत्व की सूची प्राप्त करने के लिए कार्य करता है - और यह इन नोड्स को इन-मेमोरी छद्म तालिका XT के रूप में प्राप्त करता है एक एक्सएमएल कॉलम के साथ XC जिससे आप फिर से मान प्राप्त कर सकते हैं (जैसे पहले <ns:AStatus> . तक पहुंचना तत्व)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. भारी अनुक्रमित चाइल्ड आइटम्स के थोक सम्मिलन (एसक्यूएल सर्वर 2008)

  2. SQL सर्वर लॉक एस्केलेशन

  3. तालिकाओं के लिए भाषा अनुवाद

  4. IIS 7 AppPool पहचान को SQL सर्वर लॉगऑन के रूप में जोड़ें

  5. <तालिका-मूल्यवान फ़ंक्शन> एक मान्यता प्राप्त अंतर्निहित फ़ंक्शन नाम नहीं है