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).