Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Não é possível ler o conteúdo quando o XML tem 2 wrappers


O problema não tem nada a ver com o número de "wrappers" em torno de seus dados XML. O problema é:sua primeira amostra define um namespace XML (xmlns="test.xsd" ) no <data> node, mas sua consulta não está respeitando isso.

Você precisa alterar sua consulta para algo assim:
-- 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);

Então você terá resultados....

Sem essa declaração de namespace XML, sua consulta funcionaria bem - dois wrappers ou mais não importam.