Можно / нужно ли использовать критерии 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 + '%'
Возможно ли это / рекомендуется?
Есть ли лучший способ сделать что-то подобное?
Причина, по которой я ставлю символы подстановки на обоих концах пункта, заключается в том, что в текстах карт используются термины «архи-злодей», «воин-зверь», «прямой урон» и «боевой урон».
У меня складывается впечатление, что в зависимости от производительности я могу либо использовать указанный запрос, либо использовать полнотекстовый поиск по ключевым словам для выполнения той же задачи?
Кроме того, чтобы сервер делал текстовый индекс для полей, которые я хочу найти, нужно ли что-нибудь еще делать?