Sql server 使用SQL参数查询XML数据

Sql server 使用SQL参数查询XML数据,sql-server,xml,tsql,Sql Server,Xml,Tsql,我试图使用包含搜索条件的SQL参数查询表中的XML数据,但得到了意外的结果 作为一个例子,考虑下面的T-SQL代码: DECLARE @Configuration AS TABLE ( [Data] XML NOT NULL ); INSERT INTO Configuration ([Data]) VALUES '<Configuration><Colors><Color>RED</Color><Color>BLUE<

我试图使用包含搜索条件的SQL参数查询表中的XML数据,但得到了意外的结果

作为一个例子,考虑下面的T-SQL代码:

DECLARE @Configuration AS TABLE
(
    [Data] XML NOT NULL
);

INSERT INTO Configuration ([Data]) VALUES '<Configuration><Colors><Color>RED</Color><Color>BLUE</Color></Colors></Configuration>');

DECLARE @Color AS NVARCHAR(MAX);

SET @Color = N'YELLOW';

SELECT COUNT(*) FROM @Configuration WHERE [Data].exist('/Configuration/Colors/Color/text() = sql:variable("@Color")') = 1;
将@Configuration声明为表
(
[数据]XML不为空
);
在配置([Data])中插入值“REDBLUE”);
声明@Color为NVARCHAR(最大值);
设置为@Color=N'YELLOW';
从@Configuration中选择COUNT(*),其中[Data].exist('/Configuration/Colors/Color/text()=sql:variable(“@Color”))=1;
我希望此查询的结果返回0。实际上,这个查询返回1。更糟糕的是,无论我将
@Color
设置为什么值,它似乎都会返回一个


我缺少什么?

您的查询中缺少
[

SELECT COUNT(*) FROM @Configuration WHERE [Data].exist('/Configuration/Colors/Color[text() = sql:variable("@Color")]') = 1;

XPath
表达式应该包含在
[
]
。有关
XPath
和编写表达式的更多信息,请参阅。

知道OP中查询的实际语义是什么吗?实际是什么在对
存在进行评估?@MartinSmith我相信他正试图找出XML中是否存在给定的参数值,这不是我问的。我问了什么查询目前正在进行。因为它没有引起任何错误。它只是基本上评估布尔结果的存在性吗?@MartinSmith不确定你在问什么;请填写其他详细信息,无论我误解了什么或回答不正确;我只关心解决他提出的问题。我也不确定问了什么(也许我遗漏了原始问题的一些细节)。这里提供的答案就是我想要的答案。因此,我已将其标记为已接受的解决方案。谢谢您的帮助。