Используйте несколько слов в строке ввода FullText Search - PullRequest
25 голосов
/ 09 августа 2010

У меня есть базовая хранимая процедура, которая выполняет полнотекстовый поиск по 3 столбцам таблицы путем передачи параметра @Keyword. Это работает хорошо с одним словом, но падает, когда я пытаюсь передать более одного слова. Я не уверен почему. Ошибка говорит:

Синтаксическая ошибка рядом с «элементом поиска» в условиях полнотекстового поиска «это элемент поиска»

SELECT     S.[SeriesID], 
           S.[Name] as 'SeriesName',
           P.[PackageID],
           P.[Name]     
FROM       [Series] S
INNER JOIN [PackageSeries] PS ON S.[SeriesID] = PS.[PackageID]
INNER JOIN [Package]       P  ON PS.[PackageID] = P.[PackageID]
WHERE CONTAINS ((S.[Name],S.[Description], S.[Keywords]),@Keywords)
AND   (S.[IsActive] = 1) AND (P.[IsActive] = 1) 
ORDER BY [Name] ASC

1 Ответ

40 голосов
/ 11 августа 2010

Вам нужно будет выполнить некоторую предварительную обработку вашего параметра @Keyword, прежде чем передать его в оператор SQL.SQL ожидает, что поиск по ключевым словам будет разделен логической логикой или заключен в кавычки.Итак, если вы ищете фразу, она должна быть в кавычках:

SET @Keyword = '"this is a search item"'

Если вы хотите найти все слова, вам понадобится что-то вроде

SET @Keyword = '"this" AND "is" AND "a" AND "search" AND "item"'

Дополнительные сведения см. В синтаксисе T-SQL CONTAINS , в частности, в разделе Примеры .

В качестве дополнительного примечания обязательно заменитесимвол двойной кавычки (с пробелом), чтобы вы не испортили свой полнотекстовый запрос.Подробнее о том, как это сделать, см. В этом вопросе: Escape-символы полнотекстового поиска SQL Server?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...