使用SQL参数查询XML数据

时间:2016-08-09 19:02:41

标签: 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</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;

我希望此查询的结果返回0.实际上,此查询返回1.更糟糕的是,无论我将@Color设置为什么值,它似乎都返回一个。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您的查询中缺少[

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

XPath表达式应该包含在[]之间。有关XPath和撰写表达式的更多信息,请参阅this tutorial page