В базе данных SQL Server 2008 R2 появляется следующая ошибка:
Невозможно использовать предикат
CONTAINS
илиFREETEXT
в таблице или индексированном представлении tblArmy, поскольку оно не индексируется полнотекстовым образом.
В базе данных SQL Server 2008 R2 появляется следующая ошибка:
Невозможно использовать предикат
CONTAINS
илиFREETEXT
в таблице или индексированном представлении tblArmy, поскольку оно не индексируется полнотекстовым образом.
Ответы:
Убедитесь, что у вас установлена функция полнотекстового поиска.
Создать каталог полнотекстового поиска.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Создать индекс полнотекстового поиска.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Перед созданием индекса убедитесь, что:
- у вас еще нет индекса полнотекстового поиска в таблице, поскольку для таблицы разрешен только один индекс полнотекстового поиска - в таблице
существует уникальный индекс. Индекс должен быть основан на столбце с одним ключом, что не допускает NULL.
- существует полнотекстовый каталог. Вы должны указать имя полнотекстового каталога явно, если нет полнотекстового каталога по умолчанию.
Шаги 2 и 3 можно выполнить в SQL Sever Management Studio. В проводнике объектов щелкните правой кнопкой мыши таблицу, выберите Full-Text index
пункт меню, а затем Define Full-Text Index...
пункт подменю. Мастер полнотекстового индексирования проведет вас через весь процесс. Он также создаст для вас каталог полнотекстового поиска, если у вас его еще нет.
Вы можете найти дополнительную информацию на MSDN
Обходной путь для CONTAINS
: Если вы не хотите создавать полнотекстовый индекс для столбца, а производительность не является одним из ваших приоритетов, вы можете использовать LIKE
оператор, который не требует предварительной настройки:
Пример: найти все товары, содержащие букву Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Вы должны определить Full-Text-Index
для всех таблиц в базе данных, где вам нужно использовать запрос, CONTAINS
который займет некоторое время.
Вместо этого вы можете использовать, LIKE
что даст вам мгновенные результаты без необходимости настраивать какие-либо настройки для таблиц.
Пример:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Тот же результат, полученный с помощью, CONTAINS
может быть получен с помощью LIKE
.
Возможно, вам потребуется включить таблицу для полнотекстового индексирования .
вам необходимо добавить полнотекстовый индекс в определенные поля, в которых вы хотите выполнить поиск.
ALTER TABLE news ADD FULLTEXT(headline, story);
где "новости" - ваша таблица, а поля "заголовок, история", которые вы не хотите использовать для полнотекстового поиска.
Есть еще одно решение, чтобы установить для столбца Полный текст значение true.
Это решение, например, не сработало для меня
ALTER TABLE news ADD FULLTEXT(headline, story);
Мое решение.
СЛЕДУЮЩИЕ ШАГИ
Обновить
Версия mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
будет действовать как% так же, как
where [Column] Like 'A00%'