2010-06-24 25 views
7

mevcuttur:SQL Server XML sütun aşağıdaki değerleri içeren bir xml sütun ile bir SQL Server 2005 tablo var varsayarsak() sorgusu

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

Bir tür v madde elemanlarının özendirdiği için test etmek istiyorum = "3" VE bir değer v = "DEBIT". aşağıdaki gibi ben exist() fonksiyonunu kullanıyorum

:

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

Ancak bu XMLid 1 ile satırları bana geri getirir ve 3.

kimse ben yapmak için gerekenleri değişiklik ana hatlarıyla Can benim NEREDE yalnızca node v değerinin 3 olduğu bir öğeye sahip olan kaydı ve değer düğümü v değeri "DEBIT" olan yan tümcesi döndürür? yani sadece XMLid 1

ile

Teşekkür

cevap

7

kaydetmek bu deneyin:

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

+1 lanetlemek! Sadece birazcık araştırmadan sonra bu çözüm ile geldim .... sadece 6 dakika daha hızlı olduğunuzu bulmak için ..... ARGH! :-) İyi çağrı olsa! –

+1

Mükemmel. Yardımınız için teşekkürler Matt & Marc_s. – doshea