似乎在带有通配符和动态 sql 内部变量的条件下使用 LIKE 不起作用,尽管它不会给出错误。这是一个例子。
名为 code 的列具有 A0B01C02、A0B02C2D05、A0B02C2D05 等值,我试图匹配包含像“B1”这样的子集的行。当我这样做时,它可以正常工作并按预期返回结果。
set @sql='select * from table where code like ''%B01%'''
exec sp_executesql @sql
如果我硬编码变量 set @code='B01' 的值并修改 sql 语句以连接引号和通配符:
set @sql='select * from table where code like ' +''''+ '%'+@code + '%' + ''''
exec sp_executesql @sql
这会按预期返回结果,但我必须对变量进行硬编码。但是,当我需要使用 B01 的变量进行匹配并且使用 select 语句设置变量时,我没有得到任何返回结果。我这样定义一个 nvarchar:
set @code=(select top 1 code from anotherTable where USERID=@PersonId)
但是,我确认上面的 select 语句返回了预期的代码。没有错误,但查询“执行成功”。我在 where 子句的语法中遗漏了什么吗?