假设我有一个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的记录。
谢谢