El problema no tiene nada que ver con la cantidad de "envolturas" alrededor de sus datos XML. El problema es:su primera muestra define un espacio de nombres XML (xmlns="test.xsd"
) en el <data>
nodo, pero su consulta no está respetando eso.
Debe cambiar su consulta para que sea algo como esto:
-- 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);
Entonces obtendrás resultados....
Sin esta declaración de espacio de nombres XML, su consulta funcionaría bien:dos contenedores o más no importan en absoluto.