SQL Server给varchar变量赋值时设置COLLATE及转义反斜杠的方法
错误原因
ESCAPE 是SQL Server中LIKE运算符的专属语法参数,仅能在WHERE子句的LIKE表达式中使用,不能用于变量赋值语句,所以你之前的SET写法不符合语法规范,才会触发报错。
实现方案
两个需求可以拆分处理,完全不需要在赋值语句里加ESCAPE:
- 反斜杠转义处理
赋值阶段只需要按照SQL字符串的基础转义规则编写即可:字符串里的单引号用两个单引号转义,要存入一个反斜杠就写两个反斜杠,最终变量里会直接存储你要给LIKE用的完整匹配表达式。 - 指定排序规则
可以直接在字符串常量后面加COLLATE Latin1_General_100_BIN2,变量会继承这个排序规则,后续使用该变量做匹配时会自动生效。
正确代码示例
变量赋值写法:
SET @MatchExpression = '-., *+&~`;:''"#/\(\)\\' COLLATE Latin1_General_100_BIN2
后续查询使用写法:
SELECT name FROM Names WHERE name LIKE @MatchExpression ESCAPE '\'
内容的提问来源于stack exchange,提问作者Víctor Arango Ramiro
相关产品推荐
相关产品推荐

