Как использовать LIKE в динамическом операторе t-sql в хранимой процедуре? - PullRequest
4 голосов
/ 21 марта 2011

Я пытаюсь использовать ключевое слово LIKE с символами%, обертывающими параметр, но я не уверен, как получить символы% в операторе, не нарушая его.Прямо сейчас у меня есть:

SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE %@search%'

Я получаю ошибку SqlException в моем приложении .net, которая говорит «Неверный синтаксис рядом с« @search »при запуске. Ошибка исчезнет, ​​если я удалю% символов, окружающиепараметр @search.

Ответы [ 5 ]

22 голосов
/ 22 марта 2011

Символы% должны быть в строке поиска ...

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 + '%'''
4 голосов
/ 22 марта 2011
SET @SQLQuery = 'SELECT * from [tblApps] WHERE [firstName] LIKE ''%'' + @search + ''%'''
exec sp_executesql @query=@SQLQuery, @params=N'@search nvarchar(96)', @search=@search

Единственное отличие от этой версии по сравнению с другими заключается в том, что динамическое выполнение sql фактически параметризовано, что немного уменьшает внедрение SQL.

1 голос
/ 22 марта 2011
SET @search = '%' + @search 
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE ' + @search + '%'
0 голосов
/ 02 декабря 2016
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
0 голосов
/ 26 сентября 2015

Это сработало для меня!

SET @search = '''%' + @search + '%'''
SET @SQLQuery = 'SELECT * FROM [tblApps] WHERE [firstName] LIKE' + @search
EXEC sp_executesql @SQLQuery
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...