2012-12-20 39 views
5

Tôi có một trường 'Metadata' trong bảng 'tài liệu' có các dữ liệu sau:đâu khoản trên SQL Server cột XML lọc trên thuộc tính và giá trị

<properties> 
    <property name="someProp">xyz</property> 
    <property name="reportId">55</property> 
    <property name="someOtherProp">abc</property> 
</properties>' 

Làm thế nào tôi có thể viết một truy vấn mà trả hồ sơ nơi một phần tử property tồn tại với tên của "reportId" và phần tử property "reportId" có giá trị là 55? Đôi khi nút thuộc tính "reportId" là nút duy nhất tồn tại, đôi khi không, và nó không phải lúc nào cũng theo thứ tự trên nên tôi không thể truy vấn trên các vị trí tuyệt đối. Bất kỳ ý tưởng?

Trả lời

2

Nevermind, got it. Để tham khảo:

select * from Document 
where Metadata.value('(/properties/property[@name="reportId"])[1]', 'int') = 55 
5

Không cần trích xuất giá trị. Sử dụng exist() Method (xml Data Type) để thay thế.

select * 
from Document 
where Metadata.exist('/properties/property[@name="reportId" and . = 55]') = 1 
Các vấn đề liên quan