如何将"sp_executesql"与"喜欢"和"参数"一起使用?



我无法让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_executesqllikeparameter一起使用?

我看了看,但这个问题是关于动态构建声明的,所以它对我没有帮助
而且这对我来说也没有答案

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 + '%'

相关内容

  • 没有找到相关文章

最新更新