Вашите XML данни са непълни - използват префикс на пространство от имена ns0
без да го дефинирам никъде... Добавих някакво произволно, напълно измислено XML пространство от имена тук в моя пример - трябва да проверите какво всъщност е това XML пространство от имена във вашия случай и съответно да адаптирате примера!
Опитайте това:
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)
По принцип трябва да имате дефиниция за вашия префикс на XML пространство от имена - и в SELECT
срещу тези XML данни, трябва да имате същите XML пространство от имена (въпреки че - както е показано - префиксът, присвоен на това пространство от имена, може да бъде различен - но пространството от имена трябва да съвпада!).
След това избира данните от таблицата и за XML данните използва .nodes()
Функция XQuery за получаване на списък с XML елемент, който съответства на този XPath израз - и получава тези възли като псевдо таблица в паметта XT
с една XML колона XC
от които след това можете отново да извлечете стойности (като достигане до първия <ns:AStatus>
елемент).