Может/Должен ли я использовать критерии LIKE как часть INNER JOIN при создании хранимой процедуры/запроса? Я не уверен, что задаю правильные вещи, поэтому позвольте мне объяснить.
Я создаю процедуру, которая собирает список ключевых слов, которые нужно искать в столбце, который содержит текст. Если бы я сидел на консоли, я бы выполнил его как таковой:
SELECT Id, Name, Description
FROM dbo.Card
WHERE Description LIKE '%warrior%'
OR
Description LIKE '%fiend%'
OR
Description LIKE '%damage%'
Но трюк, который я немного подобрал, чтобы выполнить "строго типизированный" синтаксический анализ списка в хранимой процедуре, состоит в том, чтобы разобрать список в табличную переменную/временную таблицу, преобразовать ее в соответствующий тип и затем выполнить INNER JOIN против этой таблицы в моем окончательном наборе результатов. Это отлично работает при отправке в список списка целых идентификаторов. Я завершаю окончательный запрос, который выглядит следующим образом:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId
Я хочу использовать этот трюк со списком строк. Но поскольку я ищу конкретное ключевое слово, я собираюсь использовать предложение LIKE. Поэтому в идеале я думаю, что мой последний запрос будет выглядеть так:
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' + @tblKeyword.Value + '%'
Возможно ли это/рекомендовано?
Есть ли лучший способ сделать что-то вроде этого?
Причина, по которой я устанавливаю подстановочные знаки на обоих концах предложения, заключается в том, что термины "арфид", "зверь-воин", "прямой ущерб" и "битва-ущерб" используются в текстах карт.
У меня создается впечатление, что в зависимости от производительности я могу либо использовать указанный мной запрос, либо использовать полнотекстовый поиск по ключевым словам для выполнения той же задачи?
Кроме того, что сервер делает текстовый индекс в полях, которые я хочу использовать для текстового поиска, есть ли что-то еще, что мне нужно сделать?