У моїй базі даних 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 text для стовпця Повний текст.
Наприклад, це рішення для мене не працювало
ALTER TABLE news ADD FULLTEXT(headline, story);
Моє рішення.
НАСТУПНІ КРОКИ
Оновити
Версія mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
буде діяти так само, як%
where [Column] Like 'A00%'