2017-04-27 55 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 ...'。 –