【发布时间】:2010-12-10 23:27:45
【问题描述】:
似乎在带有通配符和动态 sql 内部变量的条件中使用 LIKE 不起作用,尽管它不会给出错误。这是一个例子。
名为 code 的列具有 A0B01C02、A0B02C2D05、A0B02C2D05 等值,我正在尝试匹配包含像“B1”这样的子集的行。当我这样做时,它会按预期工作并返回结果。
set @sql='select * from table where code like ''%B01%'''
exec sp_executesql @sql
如果我硬编码变量的值 设置@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 子句的语法中遗漏了什么吗?
【问题讨论】:
标签: sql tsql dynamic variables wildcard