2017-04-27 52 views
0

我已經在一個表中定義的全文索引,因此下面的查詢工作得很好:使用包含視圖在SQL Server 2008 R2

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

此外,還有一個傳統欣賞到表,如下所示:

CREATE VIEW MyView AS SELECT * FROM MyTable 

是否有可能運行對視圖的查詢,而不是重新創建索引作爲?

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

我越來越Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'MyView' because it is not full-text indexed,這似乎很奇怪我的,因爲這會使視圖的查詢抽象的目的,是沒有辦法的辦法常規指標工作,要麼。

回答

0
CREATE VIEW MyView AS SELECT * FROM MyTable 

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

方式:

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

「SELECT * FROM MyTable的」 將先評估並沒有與主請求任何索引使用......它不能正常工作 「原樣」。

您應該考慮使用返回所需記錄集的存儲過程(將過濾器作爲參數傳遞)。

注意:視圖可以使用openquery或openrowset命令調用存儲過程。

+0

是的,我的主要嫌疑犯是將視圖解析爲子查詢,但基於微軟的[示例](https://technet.microsoft.com/en-us/library/ms190237(v = sql.105).aspx) ,我會說它只是展開內聯視圖:'SELECT Field FROM MyTable ...'。 –