xml - SQL Server XML 列存在()查询

标签 xml tsql xquery

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

我正在使用 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

谢谢

最佳答案

试试这个:

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

关于xml - SQL Server XML 列存在()查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109190/

相关文章:

regex - 是否可以将正则表达式直接放入 XML 内容中?

java - 使用 XMLUnit 验证 XML 元素的顺序

xslt - 很难让 Saxon 进入 XQuery 模式而不是 XSLT

带有序列的 XQuery != 运算符

xml - 编写更高效的 xquery 代码(避免冗余迭代)

html - 在 HTML 页面中显示 XML 数据

xml - 在soap ui中读取文件插入xml节点值

SQL Server : Create an optimized view that retrieve the most recent non null value

sql - 如何获取SQL Server表结构更改的历史记录

c# - Linq to Entity Join 和 Group By