Problém nemá nic společného s počtem „obalů“ kolem vašich dat XML. Problém je v tom, že váš první příklad definuje názvový prostor XML (xmlns="test.xsd"
) na <data>
uzel, ale váš dotaz to nerespektuje.
Musíte změnit svůj dotaz, aby byl něco takového:
-- 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);
Pak získáte výsledky....
Bez této deklarace jmenného prostoru XML by váš dotaz fungoval dobře – na dvou nebo více obalech vůbec nezáleží.