T-SQL и, ГДЕ КАК %Parameter пункт %

Я пытался написать заявление, которое использует, ГДЕ КАК '%text %' пункт, но я не получаю результаты, когда я пытаюсь использовать параметр для текста. Например, это работает:

SELECT Employee WHERE LastName LIKE '%ning%'

Это возвратило бы пользователей Фленнинга, Мэннинга, Нингла, и т.д. Но это заявление не было бы:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%@LastName%'

Никакие результаты не найдены. Какие-либо предложения? Заранее спасибо.

46
nl ja de

3 ответы

Это должно быть:

...
WHERE LastName LIKE '%' + @LastName + '%';

Вместо:

...
WHERE LastName LIKE '%@LastName%'

Или это:

...
WHERE LastName LIKE Concat('%',@LastName,'%')
106
добавлено
спасибо за более ранний наконечник по вопросу. Но это wasn' t все же. Так или иначе в поисках высокопроизводительного ответа - это полезно или нет?:)
добавлено автор bonCodigo, источник
@bonCodigo I don' t знают действительно, работа и оптимизация не моя область. Кроме того, эти функции - конкретный продавец в вашем случае, он зависит от того, как Oracle RDBMS оценивает их и меня don' t знают Oracle. Жаль.
добавлено автор Mahmoud Gamal, источник
см. мой ответ (в настоящее время ниже). подстановочный символ - ЧАСТЬ Поискового выражения, не часть запроса SQL. Это введено ПОЛЬЗОВАТЕЛЕМ (или, если подстановочный поиск предопределен, приложен к пользовательскому входу поискового выражения). Если вы прилагаете его через связь последовательности на уровне базы данных, вы получаете строку запроса немногократного использования
добавлено автор swe, источник
Этот didn' t работают на меня. % должен быть в addParameter разделе. Посмотрите, что Джеймс Керрэн отвечает здесь stackoverflow.com/questions/251276/…
добавлено автор bendecko, источник

The correct answer is, that, because the '%'-sign is part of your search expression, it should be part of your VALUE, so whereever you SET @LastName (be it from a programming language or from TSQL) you should set it to '%' + [userinput] + '%'

или, в вашем примере:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'
14
добавлено

you may try this one, used CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')
1
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)