In meiner SQL Server 2008 R2-Datenbank wird der folgende Fehler angezeigt:
Ein
CONTAINS
oderFREETEXT
Prädikat für die Tabelle oder die indizierte Ansicht 'tblArmy' kann nicht verwendet werden , da sie nicht im Volltext indiziert ist.
In meiner SQL Server 2008 R2-Datenbank wird der folgende Fehler angezeigt:
Ein
CONTAINS
oderFREETEXT
Prädikat für die Tabelle oder die indizierte Ansicht 'tblArmy' kann nicht verwendet werden , da sie nicht im Volltext indiziert ist.
Antworten:
Stellen Sie sicher, dass die Volltextsuchfunktion installiert ist.
Erstellen Sie einen Volltextsuchkatalog.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Erstellen Sie einen Volltextsuchindex.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Stellen Sie vor dem Erstellen des Index Folgendes sicher:
- Sie haben noch keinen Volltextsuchindex für die Tabelle, da nur ein Volltextsuchindex für eine Tabelle zulässig ist.
- Für die Tabelle ist ein eindeutiger Index vorhanden. Der Index muss auf einer Einzelschlüsselspalte basieren, die NULL nicht zulässt.
- Volltextkatalog existiert. Sie müssen den Volltextkatalognamen explizit angeben, wenn kein Standardvolltextkatalog vorhanden ist.
Sie können die Schritte 2 und 3 in SQL Server Management Studio ausführen. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf eine Tabelle, wählen Sie den Full-Text index
Menüpunkt und dann den Define Full-Text Index...
Untermenüpunkt. Der Volltext-Indizierungsassistent führt Sie durch den Vorgang. Außerdem wird ein Volltextsuchkatalog für Sie erstellt, falls Sie noch keinen haben.
Weitere Informationen finden Sie bei MSDN
Eine Problemumgehung für CONTAINS
: Wenn Sie keinen Volltextindex für die Spalte erstellen möchten und die Leistung nicht zu Ihren Prioritäten gehört, können Sie die LIKE
Anweisung verwenden, für die keine vorherige Konfiguration erforderlich ist:
Beispiel: Finden Sie alle Produkte, die den Buchstaben Q enthalten:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Sie müssen Full-Text-Index
für alle Tabellen in der Datenbank definieren, wo Sie eine Abfrage verwenden müssen, die einige Zeit in Anspruch CONTAINS
nehmen wird.
Stattdessen können Sie das verwenden LIKE
, mit dem Sie sofort Ergebnisse erzielen, ohne die Einstellungen für die Tabellen anpassen zu müssen.
Beispiel:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Das gleiche Ergebnis CONTAINS
kann mit erzielt werden LIKE
.
Möglicherweise müssen Sie die Tabelle für die Volltextindizierung aktivieren .
Sie müssen einen Volltextindex für bestimmte Felder hinzufügen, die Sie durchsuchen möchten.
ALTER TABLE news ADD FULLTEXT(headline, story);
Dabei sind "Nachrichten" Ihre Tabelle und die Felder "Überschrift, Geschichte", die Sie für die Volltextsuche nicht aktivieren
Es gibt noch eine weitere Lösung, um die Spalte Volltext auf true zu setzen.
Diese Lösung hat zum Beispiel bei mir nicht funktioniert
ALTER TABLE news ADD FULLTEXT(headline, story);
Meine Lösung.
NÄCHSTE SCHRITTE
Aktualisierung
Version von mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
wird als% gleich wie handeln
where [Column] Like 'A00%'