似乎在通配符和动态sql内部的变量条件下使用LIKE不起作用,尽管它没有给出错误。这是一个例子。TSQL在where子句中使用通配符和动态sql
被称为代码的列具有类似A0B01C02,A0B02C2D05,A0B02C2D05等的值,我试图在包含像B1这样的子集的行上进行匹配。当我这样做时,它会工作并按预期返回结果。
set @sql='select * from table where code like ''%B01%'''
exec sp_executesql @sql
如果我硬编码变量 集@码的值=“B01” 和修改SQL语句来连接引号和通配符:
set @sql='select * from table where code like ' +''''+ '%'[email protected] + '%' + ''''
exec sp_executesql @sql
这将返回的结果不如预期,但我必须对变量进行硬编码。但是,当我需要使用B01的变量进行匹配,并且该变量是使用select语句设置的时,我不会得到任何返回的结果。我定义了一个nvarchar,如下所示:
set @code=(select top 1 code from anotherTable where [email protected])
但是,我确认上面的select语句返回了预期的代码。没有错误,但查询“已成功执行”。我是否在where子句的语法中缺少某些内容?
你不需要循环到一个字符串分割成行,看到:HTTP://stackoverflow.com /问题/ 1456192 /比较-A柱到A-列表的值,在-T-SQL/1456404#1456404 – 2009-10-28 18:49:33