Помимо удвоения одинарных кавычек (или использования параметризованного запроса), пользователь узнает, что "_" и "%" являются подстановочными знаками (любой символ и ноль или больше любых символов соответственно), и что «[...]» создает замыкание?
Чтобы убежать от этих персонажей, есть два маршрута
WHERE Foo LIKE '%xxx\%yyy%' ESCAPE '\'
или
ГДЕ Foo LIKE '% xxx [%] гггг%'
второй использует побочный эффект создания замыкания и избегает необходимости использовать ESCAPE (который сам по себе требует некоторой мысли, чтобы выбрать символ, который не конфликтует с остальной частью строки или сам по себе экранируется там, где это происходит) )
Обратите внимание, что использование 'LIKE% somestring%' обычно требует сканирования таблицы и, следовательно, может привести к проблемам с производительностью - например, если у вас есть миллионы строк для проверки.
В SQL Server вы можете использовать sp_ExecuteSQL, если вы генерируете предложения WHERE путем конкатенации строк, так что включаются только поля, для которых пользователь задает критерии. sp_ExecuteSQL кеширует запрос и, в большинстве случаев, повышает производительность. (спросите, если это актуально, и вам нужна помощь)