我无法让 sp_executesql 使用非常简单的语句。
当我这样做时
select * from vwChassisHistory t where t.ChassisNumber like '%1234%'
正如我所料,它重新调整了 214 行
但是当我这样做时
exec sp_executesql
N'select * from vwChassisHistory t where t.ChassisNumber like ''%@ChassisNumber%'' ',
N'@ChassisNumber varchar(4)',@ChassisNumber='1234'
它返回 0 行
所以我一定在这里犯了一个非常愚蠢的错误,但我就是看不到它。
如何将
sp_executesql
与 like
和 parameter
一起使用?
我看着this,但是这个问题是关于动态构建语句的,所以它对我没有帮助
另外this没有给我答案
编辑
为了让
SqlCommand
生成接受的答案中的sql,我必须修改这个代码
string chassisNumber = "1234";
string sql = "select * from vwChassisHistory t ";
string where += "where t.ChassisNumber like '%@ChassisNumber%' ";
到此
string where = "where t.ChassisNumber like '%' + @ChassisNumber + '%' ";
您需要将
@parameter
和 %
字符分开:
exec sp_executesql
N'SELECT * FROM vwChassisHistory t WHERE (t.ChassisNumber LIKE ''%'' + @ChassisNumber + ''%'')',
-- ^ ^
-- ------------------------------------------------------------------+ |
-- -----------------------------------------------------------------------------------+
N'@ChassisNumber VARCHAR(4)', @ChassisNumber = '1234'
在原始查询中,参数名称成为字符串文字的一部分,SQL Server 最终搜索子字符串
@ChassisNumber
:
SELECT * FROM vwChassisHistory t WHERE t.ChassisNumber LIKE '%@ChassisNumber%'
修改后的查询执行如下:
SELECT * FROM vwChassisHistory t WHERE t.ChassisNumber LIKE '%' + @ChassisNumber + '%'