Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę zapytać o wartość w kolumnie XML w SQL Server 2008?

Twoje dane XML są niekompletne - używają prefiksu przestrzeni nazw ns0 bez definiowania jej nigdzie... Dodałem tutaj w moim przykładzie pewną arbitralną, całkowicie zmyśloną przestrzeń nazw XML - musisz sprawdzić, czym właściwie jest ta przestrzeń nazw XML w twoim przypadku i odpowiednio dostosować próbkę!

Spróbuj tego:

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)

Zasadniczo musisz mieć definicję dla prefiksu przestrzeni nazw XML - oraz w SELECT w stosunku do tych danych XML, musisz mieć takie same Przestrzeń nazw XML (chociaż – jak pokazano – prefiks przypisany do tej przestrzeni nazw może być inny – ale przestrzeń nazw musi pasować!).

Następnie wybiera dane z tabeli, a dla danych XML używa .nodes() Funkcja XQuery do pobrania listy elementów XML pasujących do tego wyrażenia XPath — i pobiera te węzły jako pseudotablicę w pamięci XT z pojedynczą kolumną XML XC z którego możesz ponownie pobrać wartości (np. sięgając do pierwszego <ns:AStatus> element).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z agregacji warunkowej w SQL Server 2008

  2. Porównanie dwóch masek bitowych w SQL w celu sprawdzenia, czy któryś z bitów pasuje

  3. Jak korzystać z UPDATE z SELECT w SQL Server

  4. Jak obliczyć kwadrat w SQL Server

  5. SQL :usuń ostatni przecinek w łańcuchu