Я знаю, что это очень старое, но это возникло в моем поиске, чтобы решить ту же проблему, и я нашел решение, не описанное здесь. Я добавляю новое потенциальное решение, чтобы помочь тому, кто еще может последовать за ним.
Как написано, это решение работает только в SQL Server 2016 и более поздних версиях, но его можно адаптировать для более старых версий, написав пользовательский string_split UDF и используя подзапрос вместо CTE.
Во-первых, сопоставьте вашу @SearchedDescription с набором данных в виде одной строки, используя JOIN:
=JOIN(@SearchedDedscription, ",")
Затем используйте STRING_SPLIT, чтобы отобразить строку типа «A, B, C, D» в табличную структуру.
;with
SearchTerms as (
select distinct
Value
from
string_split(@SearchedDescription, ',')
)
select distinct
*
from
Products
inner join SearchTerms on
Products.Description like SearchTerms.Value + '%'
Если кто-то добавит один и тот же термин поиска несколько раз, это приведет к дублированию строк в наборе результатов. Аналогичным образом, один продукт может соответствовать нескольким условиям поиска. Я добавил distinct
и в SearchTerms CTE, и в основной запрос, чтобы попытаться подавить это неуместное дублирование строк.
Если ваш запрос более сложный (включая результаты других объединений), это может стать все более серьезной проблемой. Просто знайте об этом, это главный недостаток этого метода.