Вот два способа, в зависимости от того, что вы хотите сделать (предполагая SQL 2005+ из ключевого слова FREETEXT
). Первый выбор после данных примера возвращает индекс ключевого слова (отфильтруйте нули, если вы не хотите, чтобы ключевые слова не были найдены). Второй просто проверяет наличие
Declare @keywords as table (keyword varchar(50))
INSERT INTO @keywords
VALUES ('quandary'),
('variable'),
('paragraph'),
('Narwhal')
DECLARE @input as varchar(max)
SET @input = 'Heres my quandary. I have a variable that contains a paragraph of text, and I have a column full of keywords. I want to search each of the keywords contained in the column against the entirety of the text contained within my variable'
SELECT keyword, CHARINDEX(keyword, @input , 0)
FROM @keywords
SELECT kw.keyword
FROM
(SELECT @input input) bigstring
INNER JOIN @keywords kw
on bigstring.input like '%' + kw.keyword + '%'
(4 row(s) affected)
keyword
----------------------- --------------------
quandary 10
variable 29
paragraph 54
Narwhal 0
(4 row(s) affected)
keyword
-----------------------
quandary
variable
paragraph
(3 row(s) affected)
Я бы не удивился, если бы было и решение CROSS APPLY
Обновление
Вывод только первого ключевого слова в качестве выходного параметра
Данные
CREATE TABLE table1 (keyword varchar(50))
INSERT INTO table1
VALUES ('quandary'),
('variable'),
('paragraph'),
('Narwhal')
GO
Proc
CREATE proc testKeyword
@input varchar(1000),
@debug varchar(25) output
AS
BEGIN
SELECT TOP 1 @debug = kw.keyword
FROM (SELECT @input input) bigstring
INNER JOIN table1 kw
on bigstring.input LIKE '%' + kw.keyword + '%'
END
Тест
DECLARE @debug varchar(25)
EXEC testKeyword 'Heres my quandary. I have a variable that contains a paragraph of text, and I have a column full of keywords. I want to search each of the keywords contained in the column against the entirety of the text contained within my variable',
@debug out
SELECT @debug
outputs
-------------------------
quandary
(1 row(s) affected)