我无法使用一个非常简单的语句来获取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 + '%' ";
答案 0 :(得分:6)
您需要分隔@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 + '%'