Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana saya bisa menanyakan nilai dalam kolom XML di SQL Server 2008

Data XML Anda tidak lengkap - menggunakan awalan namespace ns0 tanpa mendefinisikannya di mana pun... Saya telah menambahkan beberapa namespace XML yang benar-benar dibuat-buat di sini dalam sampel saya - Anda perlu memeriksa apa sebenarnya namespace XML itu dalam kasus Anda dan mengadaptasi sampel yang sesuai!

Coba ini:

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)

Pada dasarnya, Anda harus memiliki definisi untuk awalan namespace XML Anda - dan di SELECT terhadap data XML ini, Anda harus memiliki sama Namespace XML (walaupun - seperti yang ditunjukkan - awalan yang ditetapkan untuk namespace tersebut bisa berbeda - tetapi namespace harus cocok!).

Ini kemudian memilih data dari tabel, dan untuk data XML, menggunakan .nodes() XQuery berfungsi untuk mendapatkan daftar elemen XML yang cocok dengan ekspresi XPath ini - dan mendapatkan node ini sebagai tabel pseudo dalam memori XT dengan satu kolom XML XC dari mana Anda dapat mengambil kembali nilai (seperti menjangkau <ns:AStatus> pertama elemen).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Variabel server SQL:loop vs duplikat?

  2. Perbedaan antara numerik, float dan desimal di SQL Server

  3. Bagaimana saya bisa melampirkan database?

  4. Bagaimana cara menginstal freetds di Linux?

  5. SQL Server:Apa perbedaan antara CROSS JOIN dan FULL OUTER JOIN?