2010-06-24 41 views
7

Giả sử tôi có một bảng SQL Server 2005 với một cột xml chứa các giá trị sau:SQL Server XML Cột tồn tại() truy vấn

CREATE TABLE XmlTest (
    XMLid int, 
    Data xml) 

INSERT XMLTest 
VALUES (1 , '<data><item><type v="1" /><value v="12.56" /></item><item><type  v="3" /><value v="DEBIT" /></item></data>') 

INSERT XMLTest 
VALUES (2 , '<data><item><type v="1" /><value v="99.22" /></item><item><type v="3" /><value v="CREDIT" /></item></data>') 

INSERT XMLTest 
VALUES (3 , '<data><item><type v="3" /><value v="12.56" /></item><item><type v="1" /><value v="DEBIT" /></item></data>') 

Tôi muốn thử nghiệm cho sự tồn tại của các yếu tố mục với một loại v = "3" VÀ giá trị v = "DEBIT".

Tôi đang sử dụng tồn tại() chức năng như sau:

SELECT * 
FROM XmlTest 
WHERE Data.exist('/data/item/type[@v=''3'']') = 1 
AND Data.exist('/data/item/value[@v=''DEBIT'']') = 1 

Tuy nhiên điều này mang lại cho tôi trở lại hàng với XMLid 1 và 3.

bất cứ ai có thể phác thảo những gì thay đổi tôi cần phải thực hiện để tôi ĐÂU mệnh đề để trả về bản ghi chỉ có một mục có giá trị nút v là 3 và giá trị nút giá trị v là "DEBIT"? ví dụ: chỉ ghi với XMLid 1

Cảm ơn

Trả lời

7

Hãy thử điều này:

SELECT * 
FROM XmlTest 
WHERE Data.exist('/data/item[type[@v=''3''] and value[@v=''DEBIT'']]') = 1 
+1

+1 darn! Tôi vừa mới đưa ra giải pháp này sau một chút nghiên cứu .... chỉ để thấy bạn đã nhanh hơn 6 phút ..... ARGH! :-) Cuộc gọi tốt, mặc dù! –

+1

Hoàn hảo. Cảm ơn Matt & Marc_s đã hỗ trợ bạn. – doshea

Các vấn đề liên quan