我正在尝试使用包含参数的%通配符的LIKE关键字,但我不确定如何在不破坏它的情况下将%字符放入语句中。现在我有:
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE %@search%'
我的.net应用程序中出现SqlException错误,当我运行它时,“@ search”附近的语法不正确。如果删除@search参数周围的%字符,错误就会消失。
答案 0 :(得分:20)
%字符必须 搜索字符串...
SET @search = '%' + @search + '%'
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE @search'
请注意,以下内容也可以使用,但会引入SQL注入漏洞的可能性......
-- DON'T do this!
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE ''%' + @search + '%'''
答案 1 :(得分:4)
SET @SQLQuery = 'SELECT * from [tblApps] WHERE [firstName] LIKE ''%'' + @search + ''%'''
exec sp_executesql @query=@SQLQuery, @params=N'@search nvarchar(96)', @search=@search
与其他版本相比,与此版本的唯一区别在于,sql的动态执行实际上是参数化的,这有点减轻了sql注入。
答案 2 :(得分:1)
SET @search = '%' + @search
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE ' + @search + '%'
答案 3 :(得分:0)
这对我有用!
SET @search = '''%' + @search + '%'''
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE' + @search
EXEC sp_executesql @SQLQuery
答案 4 :(得分:0)
declare @Cmd nvarchar(2000)
declare @eName varchar(10)
set @eName='a'
set @Cmd= 'select * from customer1 where name LIKE '''+'%' +@eName+ '%' + ''''
print @Cmd
EXECUTE sp_executesql @Cmd