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()
を使用します この XPath 式に一致する XML 要素のリストを取得する XQuery 関数 - これらのノードをメモリ内疑似テーブル XT
として取得します。 単一の XML 列 XC
を使用 そこから再び値を取得できます (最初の <ns:AStatus>
に到達するなど) 要素)