SQL Server XML列exists()查询

dos*_*hea 7 xml t-sql xquery

假设我有一个带有xml列的SQL Server 2005表,其中包含以下值:

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>' )
Run Code Online (Sandbox Code Playgroud)

我想测试具有类型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
Run Code Online (Sandbox Code Playgroud)

然而,这给我带回了XMLid 1和3的行.

任何人都可以概述我需要对WHERE子句进行哪些更改,以仅返回具有类型节点v值为3且值节点v值为"DEBIT"的项的记录?即仅使用XMLid 1记录

谢谢

Mat*_*son 7

试试这个:

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