我无法让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
一起使用?
我看了看,但这个问题是关于动态构建声明的,所以它对我没有帮助
而且这对我来说也没有答案
EDIT
为了让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 + '%'