Giả sử bạn đang cố gắng lọc một ID trong XML, bạn gặp vấn đề với cú pháp, bạn đã cung cấp nút gốc là ActivityId thay vì Activity, bạn không truy cập vào nút ID, bạn đang sử dụng sai contains
- và đó có thể không phải là điều bạn muốn; và bạn đang bỏ qua không gian tên.
Điều này sẽ chỉ tìm thấy các hàng mà XML có một ID cụ thể:
SELECT * from activity
where ExtractValue(xml,
'/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID/text()',
'xmlns="urn:astrazeneca:na:Activity:domain:3" xmlns:ns2="urn:astrazeneca:na:CommonTypes:domain:2"'
) = 10669;
Nhưng ExtractValue từ lâu đã không còn được dùng nữa, vì vậy bạn nên sử dụng XMLQuery để thay thế. Hoặc trong bối cảnh này, có lẽ sẽ hợp lý hơn khi sử dụng XMLExists, với giá trị bạn muốn nhúng:
SELECT * from activity
where XMLExists('
declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=10669]
'
passing xml
);
hoặc có thể được cung cấp hữu ích hơn dưới dạng đối số:
SELECT * from activity
where XMLExists('
declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=$id]
'
passing xml, 10669 as "id"
);
Sau đó, nếu bạn muốn trích xuất dữ liệu cụ thể từ XML trong các hàng phù hợp thì hãy xem XMLQuery hoặc XMLTable - nhưng đó là một vấn đề riêng biệt.