Несколько операторов LIKE в TSQL

Это то, чего я пытаюсь достичь в простейшей форме:

SELECT p.ProductId, p.ProductName, p.SKU FROM tbl_Product p WHERE (p.ProductName LIKE '%white%' OR p.SKU LIKE '%white%') AND (p.ProductName LIKE '%cup%' OR p.SKU LIKE '%cup%') 

Я пытаюсь сделать это в UDF, который принимает параметр, разделенный запятыми, для всех условий поиска.

Я попытался разбить этот параметр во временную таблицу и попробовать присоединиться, например:

 DECLARE @SearchText nvarchar(1000) SELECT @SearchText='white,cup' DECLARE @SearchTerms TABLE (String nvarchar(200)) INSERT INTO @SearchTerms (String) SELECT '%' + String + '%' FROM dbo.CsvSplitString(@SearchText) SELECT p.ProductId, p.ProductName, p.SKU FROM tbl_Product p JOIN @SearchTerms s ON (p.ProductName LIKE s.String OR p.SKU LIKE s.String) 

Но это не возвращает то, что я хочу – оно возвращает любые записи, в которых имя или SKU соответствует одному из условий поиска. Мне нужно, чтобы он возвращался как первый запрос, где Имя или SKU соответствует всем поисковым запросам (я думаю, это имеет смысл).

Было бы большой благодарностью за толкание в правильном направлении – дайте мне знать, если вы хотите, чтобы я был более конкретным.

Примечание: полнотекстовый поиск в настоящий момент не является жизнеспособным вариантом.

Благодаря!

Следующий запрос должен сделать это, но это может быть не самый быстрый!

 DECLARE @SearchText nvarchar(1000) SELECT @SearchText='white,cup' DECLARE @keywords TABLE (keyword nvarchar(255)) DECLARE @keywordCount int INSERT INTO @keywords (keyword) SELECT * FROM dbo.CsvSplitString(@SearchText) SET @keywordCount = (SELECT COUNT(*) FROM @keywords) SELECT * FROM tbl_Product p WHERE EXISTS (SELECT * FROM (SELECT productId FROM tbl_Product, @keywords WHERE productname like '%' + keyword + '%' or sku like '%' + keyword + '%' GROUP BY productid HAVING COUNT(*) = @keywordCount ) matches WHERE p.ProductId=matches.ProductId ) 

Если все остальное не удается, вы можете запустить курсор над @SearchTerms и @SearchTerms результаты, проверяя каждый элемент, если он присутствует в ваших результатах.

У вас, скорее всего, не будет много элементов поиска (5-6 будет настолько редкими), поэтому стоимость курсора должна быть незначительной по сравнению с бегом, like и снова над текстом. И это тоже не должно быть слишком дорого.

Изменить: то, что я делал в прошлом для поиска, отправляет запрос в текстовом виде на сервер вместо того, чтобы полагаться на хранимые процедуры, поэтому я мог бы самостоятельно объединить свои условия. Вы можете сделать то же самое с динамическими запросами и exec на сервере, если хотите. Этот способ кажется довольно взломанным, и это не очевидно, это улучшение производительности. Пища для размышлений.

  • SQL LIKE% NOT SEARCHING
  • Исключить строку в SQL Server, чтобы ее можно было использовать в выражении LIKE
  • Как я могу избежать квадратных скобок в предложении LIKE?
  • Предложение «LIKE» с оператором «AND» в SQL Server 2012
  • Использование SQL LIKE-оператора с %%
  • Динамическое подобное заявление в SQL
  • T-SQL вроде не работает, как ожидалось - возвращает LESS-запросы, чем тот же запрос, используя =
  • SQL Server, объединяющий% и подстановочные знаки в инструкции LIKE
  • Каков наилучший способ вернуть результаты, похожие на вход?
  • Оператор SQL LIKE не показывает результат, когда он должен
  • Оператор LIKE в SQL Server
  • Давайте будем гением компьютера.