Я получаю следующую ошибку в базе данных 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);
где "новости" - это ваши таблицы и поля "заголовок, история", которые вы не сможете включить для полнотекстового поиска
Есть еще одно решение установить столбец Full text в true.
Это решение, например, не сработало для меня
ALTER TABLE news ADD FULLTEXT(headline, story);
Мое решение.
СЛЕДУЮЩИЕ ШАГИ
Обновить
Версия mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
будет действовать как% так же, как
where [Column] Like 'A00%'