SQL Server XML列搜索报错:'Request'附近语法错误,求协助排查
问题原因与解决方法
你遇到的语法错误,核心原因是字符串中的单引号没有正确转义。在SQL Server的XQuery表达式里,如果你要在单引号包裹的字符串内部使用单引号,必须用两个连续的单引号来表示一个实际的单引号,否则数据库会把中间的单引号当成字符串的结束标记,导致语法解析失败。
修正后的查询语句
SELECT * FROM [dbo].[HistoryData] WHERE [Data].exist('//text()[contains(., ''Request viewed'' )]') = 1
关键细节解释
- 单引号转义:把原语句里的
'Request viewed'改成''Request viewed'',这样数据库才能正确识别这是一个完整的字符串参数,不会因为中间的单引号截断表达式。 - 函数大小写规范:虽然SQL Server对T-SQL关键字不区分大小写,但XQuery的函数遵循标准规范要求小写,建议用
contains而非大写的CONTAINS,避免潜在的兼容性问题。
可选优化:不区分大小写搜索
如果需要忽略大小写匹配结果,可以结合lower-case()函数统一转换文本后再判断:
SELECT * FROM [dbo].[HistoryData] WHERE [Data].exist('//text()[contains(lower-case(.), ''request viewed'' )]') = 1
内容的提问来源于stack exchange,提问作者Anele Ngqandu
相关产品推荐
相关产品推荐

