SQL Server XML列exist()查询

7

假设我有一个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"的item元素是否存在。

我使用exist()函数如下:

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的记录。

谢谢

1个回答

7

试试这个:

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

1
+1 真糟糕!我刚做完一些研究,想到了这个解决方案……结果发现你比我快了6分钟……唉!:-) 不过,你的想法很好! - marc_s
1
完美。感谢 Matt 和 Marc_s 的帮助。 - doshea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接