create view v_test
select * from dbo.test option(recompile) ;
创建上面视图时会报下面错误:
Msg 156, Level 15, State 1, Procedure v_test, Line 3
关键字 'option' 附近有语法错误。
其实中有明确的限制说明,如下所示,只是很多知识点随着时间流逝,慢慢变得模糊不清,需要重拾起来。
视图定义中的 SELECT 子句不能包括下列内容:
• ORDER BY 子句,除非在 SELECT 语句的选择列表中也有一个 TOP 子句。
重要
• ORDER BY 子句仅用于确定视图定义中的 TOP 或 OFFSET 子句返回的行。 ORDER BY 不保证在查询视图时得到有序结果,除非在查询本身中也指定了 ORDER BY。
• INTO 关键字
• OPTION 子句
但是我们可以像表一样,在查询语句中使用提示option(recompile)
select * from v_test option(recompile);
另外一种编译视图的方式,就是使用sp_recompile,但是这种方法有一种缺陷,因为查询视图的SQL语句的查询条件中会使用变量,最好在执行阶段重新编译,以便它能获取一个较优或正确的执行计划,而sp_recompile只能手工触发视图重编译,所以不太适合这种场景。
sp_recompile v_test;