2010-06-24 71 views
7

假設我有一個SQL Server 2005的表,用含有如下值的XML列:SQL Server的XML列存在()的查詢

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>') 

我想測試項目元素與V型是否存在等= 「3」和值v =「DEBIT」。

我使用的是存在()函數如下:

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

然而,這使我回行與XMLid 1和3

任何人都可以說明我需要什麼樣的變化,使我在哪裏子句只返回具有類型節點v值爲3且值節點v值爲「DEBIT」的項目的記錄?即,僅在XMLid 1

記錄

感謝

回答

7

試試這個:

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

+1 DARN!我經過一番研究後纔想出了這個解決方案....只是爲了找到你已經快了6分鐘了..... ARGH! :-)但是,好的通話! – 2010-06-24 11:07:30

+1

完美。感謝Matt&Marc_s的幫助。 – doshea 2010-06-24 12:04:40