我正在尝试使用包含搜索条件的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
设置为什么值,它似乎都返回一个。
我错过了什么?
答案 0 :(得分:3)
您的查询中缺少[
SELECT COUNT(*) FROM @Configuration WHERE [Data].exist('/Configuration/Colors/Color[text() = sql:variable("@Color")]') = 1;
XPath
表达式应该包含在[
和]
之间。有关XPath
和撰写表达式的更多信息,请参阅this tutorial page。