2017-04-27 2 views
0

J'ai défini un index de texte intégral sur une table, de sorte que la requête suivante fonctionne très bien:En utilisant CONTIENT sur la vue dans SQL Server 2008 R2

SELECT Field FROM MyTable WHERE CONTAINS(Field, 'text') 

En outre, il y a un héritage vue sur la table, comme suit:

CREATE VIEW MyView AS SELECT * FROM MyTable 

Est-il possible d'exécuter la requête sur la vue, pas recréer indexé?

SELECT Field FROM MyView WHERE CONTAINS(Field, 'text') 

Je reçois Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'MyView' because it is not full-text indexed, ce qui semble étrange pour moi, car cela va à l'encontre de but de la vue de l'abstraction de la requête et n'est pas la façon dont les indices réguliers fonctionnent soit.

Répondre

0

Crée un index de texte intégral sur une table ou une vue indexée dans une base de données dans SQL Server. Un seul index de texte intégral est autorisé par table ou vue indexée et chaque index de texte intégral s'applique à une seule table ou à une vue indexée.

Le lien ci-dessous vous sera utile. https://docs.microsoft.com/en-us/sql/t-sql/statements/create-fulltext-index-transact-sql

+0

Vous avez manqué le point. J'ai créé le FTI sur une table, mais le problème est qu'il ne s'applique pas lorsque j'interroge une vue sur cette table. –

0
CREATE VIEW MyView AS SELECT * FROM MyTable 

SELECT Field FROM MyView WHERE CONTAINS(Field, 'text') 

Moyens:

SELECT Field FROM (SELECT * FROM MyTable) WHERE CONTAINS(Field, 'text') 

"SELECT * FROM MyTable" sera évalué d'abord et utilisé sans index avec la demande principale ... Il ne peut pas travailler "comme est".

Vous devriez envisager d'utiliser une procédure stockée retourne le jeu d'enregistrement souhaité (passer le filtre comme argument).

Note: Une vue peut appeler une procédure de stockage en utilisant les commandes OPENQUERY ou OpenRowset.

+0

Oui, mon principal suspect était la vue résolue vers une sous-requête, mais basée sur [exemple] de Microsoft (https://technet.microsoft.com/en-us/library/ms190237 (v = sql.105) .aspx) , Je dirais qu'il étend juste la vue en ligne: 'SELECT Field FROM MyTable ...'. –