Vấn đề không liên quan gì đến số lượng "trình bao bọc" xung quanh dữ liệu XML của bạn. Vấn đề là:mẫu đầu tiên của bạn xác định một không gian tên XML (xmlns="test.xsd"
) trên <data>
nhưng truy vấn của bạn không tôn trọng điều đó.
Bạn cần thay đổi truy vấn của mình thành như sau:
-- 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);
Sau đó, bạn sẽ nhận được kết quả ....
Nếu không có khai báo không gian tên XML này, truy vấn của bạn sẽ hoạt động tốt - hai trình bao bọc trở lên không thành vấn đề ..