В базе данных SQL Server 2008 R2 появляется следующая ошибка:
Невозможно использовать предикат
CONTAINS
илиFREETEXT
в таблице или индексированном представлении tblArmy, поскольку оно не индексируется полнотекстовым образом.
sql
sql-server
tsql
sql-server-2008
full-text-search
DotnetSparrow
источник
источник
Ответы:
Убедитесь, что у вас установлена функция полнотекстового поиска.
Создать каталог полнотекстового поиска.
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*"')
будет действовать как% так же, как
источник