O problema não tem nada a ver com o número de "wrappers" em torno de seus dados XML. O problema é:sua primeira amostra define um namespace XML (
xmlns="test.xsd"
) no <data>
node, mas sua consulta não está respeitando isso. Você precisa alterar sua consulta para algo assim:
-- 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);
Então você terá resultados....
Sem essa declaração de namespace XML, sua consulta funcionaria bem - dois wrappers ou mais não importam.