sql >> Base de Datos >  >> RDS >> Sqlserver

No se puede leer el contenido cuando XML tiene 2 contenedores

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.