Le problème n'a rien à voir avec le nombre de "wrappers" autour de vos données XML. Le problème est :votre premier exemple définit un espace de noms XML (xmlns="test.xsd"
) sur le <data>
node, mais votre requête ne respecte pas cela.
Vous devez modifier votre requête pour qu'elle ressemble à ceci :
-- 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);
Ensuite, vous obtiendrez des résultats....
Sans cette déclaration d'espace de noms XML, votre requête fonctionnerait très bien - deux wrappers ou plus n'ont pas d'importance du tout..