假设我有一个sql Server 2005表,其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”的项元素的存在性.
我使用的exists()函数如下:
SELECT * FROM XmlTest WHERE Data.exist('/data/item/type[@v=''3'']') = 1 AND Data.exist('/data/item/value[@v=''DEBIT'']') = 1
然而,这给我带回了XMLid 1和3的行.
任何人都可以概述我需要对我的WHERE子句进行哪些更改,以仅返回具有类型节点v值为3且值节点v值为“DEBIT”的项目的记录?即只用XMLid 1记录
谢谢
解决方法
试试这个:
SELECT * FROM XmlTest WHERE Data.exist('/data/item[type[@v=''3''] and value[@v=''DEBIT'']]') = 1