代码之家  ›  专栏  ›  技术社区  ›  GuidoG

如何将'sp_executesql'与'like'和'a'参数一起使用?

  •  1
  • GuidoG  · 技术社区  · 6 年前

    我不能让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 + '%' ";
    
    1 回复  |  直到 6 年前
        1
  •  6
  •   Salman Arshad    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 + '%'