この問題は、XML データの「ラッパー」の数とは関係ありません。問題は、最初のサンプルが XML 名前空間 を定義していることです。 (xmlns="test.xsd"
) <data>
で ノードですが、クエリはそれを尊重していません。
クエリを次のように変更する必要があります:
-- Using the query() method
;WITH XMLNAMESPACES (DEFAULT 'test.xsd')
SELECT
T.customer.query('id').value('.', 'INT') AS customer_id,
T.customer.query('name').value('.', 'VARCHAR(20)') AS customer_name
FROM
@data.nodes('data/subdata/customer') AS T(customer);
その後、結果が得られます....
この XML 名前空間の宣言がなければ、クエリは問題なく動作します.2 つ以上のラッパーはまったく問題ではありません..