Я хотел бы иметь процедуру SQL, которой можно передать текстовую строку, и она будет определять конкретные ключевые слова (теги) в тексте из таблицы ключевых слов.
Пока у меня есть следующее, что действительно хорошо работает для отдельных слов;
INSERT INTO #tags SELECT Word
FROM dbo.SplitWords('some colours are blue, green, red and light blue')
SELECT Word
FROM #tags
INTERSECT
SELECT Tag
FROM dbo.Tags
DROP TABLE #tags
Если в моих таблицах тегов есть записи для «зеленого», «красного» и «синего», они возвращаются, как вы могли ожидать.
Я хотел бы знать, как лучше всего добиться аналогичного результата, но для тегов, состоящих из нескольких слов ... например, «голубой»
Я понимаю, что проблема, с которой я столкнулся в приведенном выше коде, заключается в том, что я разделяю исходный текст на отдельные слова, чтобы «голубой» никогда не совпадал, но есть ли другой путь, по которому я мог бы пойти, который не задействует курсоры и т. Д.?
Спасибо за вашу помощь
Просто понял, что следующее достигнет того, что мне нужно
DECLARE @Text as nvarchar(max)
SELECT @Text = 'some colours are blue, green, red and light blue'
SELECT TagID,
Tag
FROM Tags
WHERE @Text LIKE '% ' + Tag + ' %'
ORDER BY Tag
Но я боюсь, что это может быть неэффективно, если в моей таблице несколько тысяч строк, а искомая текстовая строка очень длинная.
У кого-нибудь есть мысли о том, как я мог бы сделать тот же процесс более эффективно?