2017-09-27 7 views
3

Noteフィールドにフルテキスト索引付きのEmployees表があるとします。 私たちは、このようなクエリ使用してその表を検索することができます。私たちはSELECT ID, Note FROM Employeesのような単純なものでEmployeesViewを作成した場合、我々は、クエリを上げるだろうとSELECT ID FROM EmployeesView WHERE CONTAINS(Note, 'scout')基礎テーブルがすでに索引付けされている場合は、フルテキスト索引が必要です

でそのビューを照会することはできません、しかしSELECT ID FROM Employees WHERE CONTAINS(Note, 'scout')

を次のエラー:

Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'EmployeesView' because it is not full-text indexed.

私は、それが他の通常の索引の場合と同様に、基礎となるテーブルに対してFTSを実行するためのビューのは不可能である理由を理解したいと思いますか?

注#1この質問は、既にansweredのようにビューにフルテキストインデックスを作成する方法に関するものではありません。この質問は、なぜそれをやらなければならないのかを理解することです。

注2データベースは、提供されている例より複雑です。同じフルテキスト索引付き表を使用するビューは多数あり、索引付けできるスキーマはいくつかありますが、スキーマ・バインディングの制約のため索引付けできないものもあります。私はまた、それぞれが同一であれば、すべての単一のビューにFTIを追加するのはちょっと奇妙だと思う(そして巨大なディスクスペースの無駄)。

答えて

0

FTIを作成せずにビューでフルテキスト検索を使用できる解決策のソリューションを探している人は、私自身の質問に対する答えではありません(私はそれを受け入れません)。

SELECT * FROM EmployeesView INNER JOIN Employees ON EmployeesView.ID = Employees.ID 
WHERE CONTAINS(Employees.Note, 'scout') 

又はWHERE IN句使用して:

SELECT * FROM EmployeesView 
WHERE ID IN (SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout')) 
をINNERテーブルおよびビュー間の結合を使用してそれを行うことができ
関連する問題