Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Inhalt kann nicht gelesen werden, wenn XML 2 Wrapper hat

Das Problem hat nichts mit der Anzahl der "Wrapper" um Ihre XML-Daten zu tun. Das Problem ist:Ihr erstes Beispiel definiert einen XML-Namespace (xmlns="test.xsd" ) auf <data> Knoten, aber Ihre Abfrage respektiert das nicht.

Sie müssen Ihre Abfrage wie folgt ändern:

-- 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);

Dann erhalten Sie Ergebnisse....

Ohne diese XML-Namespace-Deklaration würde Ihre Abfrage gut funktionieren - zwei Wrapper oder mehr spielen überhaupt keine Rolle..