Problemet har ingenting att göra med antalet "omslag" runt din XML-data. Problemet är:ditt första exempel definierar ett XML-namnområde (xmlns="test.xsd"
) på <data>
nod, men din fråga respekterar inte det.
Du måste ändra din fråga så att den blir ungefär så här:
-- 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);
Då får du resultat...
Utan denna XML-namnområdesdeklaration skulle din fråga fungera bra - två omslag eller fler spelar ingen roll alls.