Problemet har intet at gøre med antallet af "indpakninger" omkring dine XML-data. Problemet er:din første prøve definerer et XML-navneområde (xmlns="test.xsd"
) på <data>
node, men din forespørgsel respekterer det ikke.
Du skal ændre din forespørgsel til at være sådan her:
-- 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);
Så får du resultater...
Uden denne XML-navneområdedeklaration ville din forespørgsel fungere fint - to indpakninger eller flere betyder overhovedet ikke noget.