2009-03-12 5 views
0

J'ai besoin de construire une requête sqlserver qui si une colonne de texte a un index de texte complet, elle sera utilisée, sinon, la requête se dégradera à l'approche O (N²) de LIKE '%word%'?Comment créer une requête sql qui utilise la recherche plein texte si un index existe?

Je crois que la réponse sera quelque chose comme:

IF has_full_text_index('mycolumn') 
    select mytable_id from mytable where contains(mycolumn, 'word') 
ELSE 
    select mytable_id from mytable where mycolumn like '%word%' 
ENDIF 

La requête sera générée par un programme. La requête n'aura toujours qu'un seul mot à associer. Le test pour voir si une colonne a un index de texte intégral doit être rapide.

+0

Je suppose que votre question n'a aucun sens pour moi (probablement manquer quelque chose). C'est votre table - ne devriez-vous pas savoir s'il y a un index de texte complet sur la colonne à l'avance? –

+0

Non, mais je ne voulais pas entrer dans l'environnement complexe où ce code est nécessaire. Le cas le plus simple à expliquer est que certains utilisateurs utiliseront une base de données sans le service d'indexation activé et que le logiciel doit encore fonctionner. – neves

Répondre

1

Bien que je suis d'accord avec Ken que vous saurez quels sont vos tables appartient à un catalogue de texte intégral, vous pouvez interroger

sp_help_fulltext_tables {catalogname} 

pour les tables de votre catalogue. (par MSDN)

+0

sp_help_fulltext_tables échoue si la recherche de texte intégral n'est pas activée pour la base de données – neves

+0

SELECT fulltextserviceproperty ('IsFulltextInstalled') renverra 1 ou 0 en fonction de l'exécution de FullText. –

Questions connexes