如何使用带有“like”和“parameter”的“sp_executesql”?

问题描述 投票:0回答:1

我无法让 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 + '%' ";
sql-server t-sql stored-procedures sql-server-2014 sql-like
1个回答
8
投票

您需要将

@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 + '%'
© www.soinside.com 2019 - 2024. All rights reserved.