Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Không thể đọc nội dung khi XML có 2 trình bao bọc

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 đề ..




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tự nối bảng theo cách mà mọi bản ghi được nối với bản ghi trước đó?

  2. Trích xuất giá trị số đầu tiên từ chuỗi sql

  3. Làm cách nào để lấy phần số từ một chuỗi bằng T-SQL?

  4. So sánh giá trị của nhiều cột từ hai cơ sở dữ liệu khác nhau

  5. Cách thực hiện THAM GIA MẶT BẰNG TRÁI trong SQL Server