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