Masalahnya tidak ada hubungannya dengan jumlah "pembungkus" di sekitar data XML Anda. Masalahnya adalah:sampel pertama Anda mendefinisikan ruang nama XML (xmlns="test.xsd"
) pada <data>
simpul, tetapi kueri Anda tidak menghargai itu.
Anda perlu mengubah kueri Anda menjadi seperti ini:
-- 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);
Maka Anda akan mendapatkan hasil....
Tanpa deklarasi namespace XML ini, kueri Anda akan berfungsi dengan baik - dua pembungkus atau lebih tidak masalah sama sekali..