W mojej bazie danych SQL Server 2008 R2 pojawia się następujący błąd:
Nie można użyć predykatu
CONTAINS
lubFREETEXT
w tabeli lub widoku indeksowanym „tblArmy”, ponieważ nie jest on indeksowany pełnotekstowo.
W mojej bazie danych SQL Server 2008 R2 pojawia się następujący błąd:
Nie można użyć predykatu
CONTAINS
lubFREETEXT
w tabeli lub widoku indeksowanym „tblArmy”, ponieważ nie jest on indeksowany pełnotekstowo.
Odpowiedzi:
Upewnij się, że masz zainstalowaną funkcję wyszukiwania pełnotekstowego.
Utwórz katalog wyszukiwania pełnotekstowego.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Utwórz indeks wyszukiwania pełnotekstowego.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Przed utworzeniem indeksu upewnij się, że:
- nie masz jeszcze indeksu wyszukiwania pełnotekstowego w tabeli, ponieważ w tabeli jest dozwolony tylko jeden indeks wyszukiwania pełnotekstowego - w tabeli
istnieje unikalny indeks. Indeks musi być oparty na kolumnie z jednym kluczem, która nie zezwala na wartość NULL.
- istnieje katalog pełnotekstowy. Jeśli nie ma domyślnego katalogu pełnotekstowego, należy jawnie określić nazwę katalogu pełnotekstowego.
Możesz wykonać kroki 2 i 3 w SQL Sever Management Studio. W eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę, wybierz Full-Text index
pozycję menu, a następnie Define Full-Text Index...
pozycję podmenu. Kreator indeksowania pełnotekstowego poprowadzi Cię przez ten proces. Stworzy również dla Ciebie katalog wyszukiwania pełnotekstowego, jeśli jeszcze go nie masz.
Więcej informacji można znaleźć w witrynie MSDN
Obejście problemu CONTAINS
: Jeśli nie chcesz tworzyć pełnotekstowego indeksu w kolumnie, a wydajność nie jest jednym z Twoich priorytetów, możesz użyć LIKE
instrukcji, która nie wymaga wcześniejszej konfiguracji:
Przykład: znajdź wszystkie produkty zawierające literę Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Musisz zdefiniować Full-Text-Index
we wszystkich tabelach w bazie danych, w których chcesz użyć zapytania, CONTAINS
które zajmie trochę czasu.
Zamiast tego możesz użyć narzędzia, LIKE
które zapewni natychmiastowe wyniki bez konieczności dostosowywania jakichkolwiek ustawień tabel.
Przykład:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Ten sam wynik uzyskany CONTAINS
za pomocą LIKE
.
Może być konieczne włączenie w tabeli indeksowania pełnotekstowego .
musisz dodać indeks pełnotekstowy do określonych pól, które chcesz przeszukać.
ALTER TABLE news ADD FULLTEXT(headline, story);
gdzie „wiadomości” to Twoja tabela, a pola „nagłówek, artykuł”, które chcesz włączyć do wyszukiwania pełnotekstowego
Jest jeszcze jedno rozwiązanie, aby ustawić pełny tekst kolumny na wartość true.
Na przykład takie rozwiązanie nie zadziałało dla mnie
ALTER TABLE news ADD FULLTEXT(headline, story);
Moje rozwiązanie.
NASTĘPNE KROKI
Odświeżać
Wersja mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
będzie działać w% tak samo jak
where [Column] Like 'A00%'