Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile leggere i contenuti quando XML ha 2 wrapper

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.