J'obtiens l'erreur suivante dans ma base de données SQL Server 2008 R2:
Impossible d'utiliser un prédicat
CONTAINS
ouFREETEXT
sur la table ou la vue indexée 'tblArmy' car elle n'est pas indexée en texte intégral.
J'obtiens l'erreur suivante dans ma base de données SQL Server 2008 R2:
Impossible d'utiliser un prédicat
CONTAINS
ouFREETEXT
sur la table ou la vue indexée 'tblArmy' car elle n'est pas indexée en texte intégral.
Réponses:
Assurez-vous que la fonction de recherche en texte intégral est installée.
Créez un catalogue de recherche en texte intégral.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Créez un index de recherche en texte intégral.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Avant de créer l'index, assurez-vous que:
- vous n'avez pas déjà d'index de recherche en texte intégral sur la table car un seul index de recherche en texte intégral est autorisé sur une table
- un index unique existe sur la table. L'index doit être basé sur une colonne à clé unique, qui n'autorise pas NULL.
- un catalogue de texte intégral existe. Vous devez spécifier explicitement le nom du catalogue de texte intégral s'il n'y a pas de catalogue de texte intégral par défaut.
Vous pouvez effectuer les étapes 2 et 3 dans SQL Server Management Studio. Dans l'explorateur d'objets, cliquez avec le bouton droit sur une table, sélectionnez l' Full-Text index
élément de menu, puis l'élément de Define Full-Text Index...
sous-menu. L'assistant d'indexation de texte intégral vous guidera tout au long du processus. Il créera également un catalogue de recherche en texte intégral pour vous si vous n'en avez pas encore.
Vous pouvez trouver plus d'informations sur MSDN
Une solution de contournement pour CONTAINS
: Si vous ne souhaitez pas créer un index de texte intégral sur la colonne et que les performances ne font pas partie de vos priorités, vous pouvez utiliser l' LIKE
instruction qui ne nécessite aucune configuration préalable:
Exemple: recherchez tous les produits contenant la lettre Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Vous devez définir Full-Text-Index
sur toutes les tables de la base de données où vous devez utiliser une requête CONTAINS
qui prendra un certain temps.
Au lieu de cela, vous pouvez utiliser le LIKE
qui vous donnera des résultats instantanés sans avoir besoin d'ajuster les paramètres des tableaux.
Exemple:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Le même résultat obtenu avec CONTAINS
peut être obtenu avec LIKE
.
Vous devrez peut-être activer la table pour l'indexation de texte intégral .
vous devez ajouter un index de texte intégral sur les champs spécifiques que vous souhaitez rechercher.
ALTER TABLE news ADD FULLTEXT(headline, story);
où "actualités" est votre tableau et les champs "titre, histoire" que vous n'activerez pas pour la recherche plein texte
Il existe une autre solution pour définir la colonne Texte intégral sur true.
Cette solution par exemple n'a pas fonctionné pour moi
ALTER TABLE news ADD FULLTEXT(headline, story);
Ma solution.
PROCHAINES ÉTAPES
Rafraîchir
Version de mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
agira comme% identique à
where [Column] Like 'A00%'