Problem nie ma nic wspólnego z liczbą „opakowań” wokół danych XML. Problem polega na tym, że pierwsza próbka definiuje przestrzeń nazw XML (xmlns="test.xsd"
) na <data>
węzeł, ale twoje zapytanie tego nie uwzględnia.
Musisz zmienić zapytanie, aby wyglądało mniej więcej tak:
-- 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);
Wtedy otrzymasz wyniki....
Bez tej deklaracji przestrzeni nazw XML Twoje zapytanie działałoby dobrze — dwa opakowania lub więcej nie mają żadnego znaczenia.