Sql server 使用SQL参数查询XML数据
我试图使用包含搜索条件的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<
作为一个例子,考虑下面的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不确定你在问什么;请填写其他详细信息,无论我误解了什么或回答不正确;我只关心解决他提出的问题。我也不确定问了什么(也许我遗漏了原始问题的一些细节)。这里提供的答案就是我想要的答案。因此,我已将其标记为已接受的解决方案。谢谢您的帮助。