Il problema non ha nulla a che fare con il numero di "wrapper" attorno ai tuoi dati XML. Il problema è:il tuo primo esempio definisce uno spazio dei nomi XML (xmlns="test.xsd"
) sul <data>
node, ma la tua query non lo sta rispettando.
Devi cambiare la tua query in modo che sia qualcosa del genere:
-- 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);
Quindi otterrai risultati....
Senza questa dichiarazione dello spazio dei nomi XML, la tua query funzionerebbe perfettamente:due o più wrapper non contano affatto.