Sql server 如何在SQL查询字符串中使用like运算符?我得到了';靠近'的语法不正确;A'';

Sql server 如何在SQL查询字符串中使用like运算符?我得到了';靠近'的语法不正确;A'';,sql-server,Sql Server,声明: declare @Searchkey varchar(50)='a' declare @Sql nvarchar(max) ='' set @Sql = @Sql + 'select * from products where upper(ProductName) like %' + upper(@Searchkey) + '%' execute sp_executesql @Sql 错误消息: Msg 102 15级状态1第1行 “A”附近的语法不正确 您没有在搜索词周

声明:

declare @Searchkey varchar(50)='a'
declare @Sql nvarchar(max) =''

set @Sql = @Sql + 
    'select * from products where upper(ProductName) like %' + upper(@Searchkey) + '%'

execute sp_executesql @Sql
错误消息:

Msg 102 15级状态1第1行
“A”附近的语法不正确


您没有在搜索词周围加引号,因此发送的文字查询是:

select * from products where upper(ProductName) like %A%
您需要将搜索词用引号括起来,如下所示:

set @Sql =@Sql+'select * from products where upper(ProductName) like ''%'+upper(@Searchkey)+'%'''
这将创建以下查询:

select * from products where upper(ProductName) like '%A%'

出现此错误的原因是,在生成动态语句时,需要在搜索模式周围添加引号。但我认为您应该在这个动态构建的语句中使用参数来防止SQL注入问题:

DECLARE @Searchkey varchar(50) = 'a'
DECLARE @Sql nvarchar(max) = N''

SET @Sql = 
    @Sql + 
    N'SELECT * FROM products WHERE UPPER(ProductName) LIKE CONCAT(''%'', UPPER(@Searchkey), ''%'')'

PRINT @Sql
EXEC sp_executesql @Sql, N'@Searchkey varchar(50)', @Searchkey
这种情况不需要动态查询,您可以使用下面的简单查询来获得所需的结果。

如果您仍然想使用动态查询,那么下面是连接语法


注意:当您在动态查询中遇到错误时,最好的方法是使用print语句打印查询,这将有助于轻松识别错误。在您的情况下,缺少一个引号。

类似的通配符
%
应该在字符串中。您似乎认为
sp\u executesql
可以保护您免受攻击。事实并非如此。如果你打电话给它的话。
declare @Searchkey varchar(50)= 'a'
select * from products where upper(ProductName) like  '%' + upper(@Searchkey) + '%' 
declare @Searchkey varchar(50)='a'
declare @Sql nvarchar(max) =''

set @Sql =@Sql+'select * from products where upper(ProductName) like ''%' +upper(@Searchkey)+'%'''

--print @Sql
execute sp_executesql @Sql