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