Bonjour tout le monde.
Bon, je suis pas très bon en SQL et j'ai un petit soucis (enfin gros :p) :
J'essaie d'utiliser une fonction de recherche de texte intégral (full text search), mais ça ne marche pas :(
Alors voilà ma situation : J'ai pas mal de tables inclues dans une vue. Dans l'une d'entre elles, la table Cause, j'ai une colonne de type texte (varchar(max)) avec un index de texte intégral dessus.
Ca me permet notamment de faire des requêtes de ce genre :
[code]select * from Cause where contains(Nom_Cause, '"malaise"')[/code]
et en beaucoup plus rapide qu'un like (bon dans le cas d'un texte simple comme ça c'est pas flagrant, mais il suffit de mettre '"*malaise*"' à la place et là la différence avec un like est monstrueuse).
Le problème, c'est que dans mon cas, je n'utilise pas la table Cause toute seule. Je l'utilise principalement dans une vue qui l'inclue (la vue Vue_Evenements).
Or, quand je fais cette requête ci :
[code]select * from vue_evenements where contains(Nom_Cause, '"malaise"')[/code]
le moteur sql me dit que ce n'est pas autorisé parcequ'il n'y a pas d'index full text dans la vue(Msg 7601).
Or, quand j'appelle la requête SQL de la vue directement, ça marche nickel :
[code]SELECT dbo.Evenement.Numero_Evenement AS [N° Evt],dbo.Cause.Nom_Cause AS Cause
FROM dbo.Evenement LEFT OUTER JOIN dbo.Cause ON dbo.Evenement.Numero_Cause = dbo.Cause.Numero_Cause
where contains(Nom_Cause, '"malaise"')[/code]
(PS : Là c'est juste un extrait, la vraie vue contient beaucoup plus de tables.)
D'après ce que j'ai cru comprendre, si je veux utiliser une FTS (full text search) dans une vue, il va falloir que je crée un clustered index sur cette vue. Mais dans mon cas, je ne peux pas créer cet index parceque j'ai des outer joins et que SQL Server me le refuse.
Y a t-il un moyen d'appeller une recherche FTS sur une vue sans créer un index dessus? Pourquoi est-ce indispensable alors que l'appel de la requête sql constitutive de la vue avec une recherche FTS fonctionne elle parfaitement?
Gilles.
Mangez des gnous!