忽略 MSSQL 变量中的通配符?

Ignore wildcard in MSSQL Variable?

我有一个包含两个参数的存储过程。前缀 varchar(50) 和后缀 varchar(50)。存储过程使用 where 子句选择一些行。现在的问题是,如果变量中有通配符,我就会出错。我如何忽略也可能是通配符的可变字符?

示例:

假设我有两行:

1。我的列:'ABCTTAX'
2.我的列:'ABCTT_X'

declare @Prefix varchar(50)
declare @Suffix varchar(50)

set @Prefix = 'ABC';
set @Suffix = '_X';

Select * from myTable where @Suffix IS NOT NULL AND myColumn like @Prefix + '__' + @Suffix

在上面的示例中,两行都将匹配。但我只想匹配第二个。

通过用方括号替换下划线文字来转义它。

Select * from myTable where @Suffix IS NOT NULL AND myColumn 
    like REPLACE(@Prefix, '_', '[_]') + '__' + REPLACE(@Suffix, '_', '[_]')

此补丁将不允许前缀和后缀输入通配符下划线。

实际上你可以这样做, 尝试

Select * from myTable where @Suffix IS NOT NULL AND myColumn like @Prefix + '%\' + @Suffix escape '\'