sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een waarde opvragen in een XML-kolom in SQL Server 2008?

Uw XML-gegevens zijn onvolledig - het gebruikt een namespace-prefix ns0 zonder het ergens te definiëren... Ik heb een willekeurige, totaal verzonnen XML-naamruimte hier in mijn voorbeeld toegevoegd - je moet controleren wat die XML-naamruimte in jouw geval is en het voorbeeld dienovereenkomstig aanpassen!

Probeer dit:

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)

In principe moet je een definitie . hebben voor uw XML-naamruimtevoorvoegsel - en in de SELECT tegen deze XML-gegevens moet u de dezelfde . hebben XML-naamruimte (ook al kan - zoals weergegeven - het voorvoegsel dat aan die naamruimte is toegewezen anders zijn - maar de naamruimte moet overeenkomen!).

Dit selecteert vervolgens de gegevens uit de tabel en voor de XML-gegevens gebruikt het de .nodes() XQuery-functie om een ​​lijst met XML-elementen te krijgen die overeenkomen met deze XPath-expressie - en het krijgt deze knooppunten als een pseudo-tabel in het geheugen XT met een enkele XML-kolom XC waaruit u dan weer waarden kunt ophalen (zoals het bereiken van de eerste <ns:AStatus> element).




  1. Oracle Connection String voor RAC-omgeving?

  2. Postgresql BESTELLEN OP spaties

  3. Kan ik de distributiemethode op een bestaande Citus-tabel wijzigen?

  4. Fatale fout:Maximale uitvoeringstijd van 30 seconden overschreden in ...\model.php op regel 183