Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Impossible de lire le contenu lorsque XML a 2 wrappers

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..