1

设置:优化对于CTE或子查询

我在SQL Server 2008 R2中OPTIMIZE FOR条款试验。我在查询结尾处添加了以下内容。

OPTION (OPTIMIZE FOR (@UserType= 'M', @Date UNKNOWN)) 

问题:

但是,我得到下面的错误。

The variable "@UserType" is specified in the OPTIMIZE FOR clause, but is not used in the query. 

此变量用于查询中的子查询中,仅用于该位置。

如果我尝试将OPTIMIZE FOR移动到子查询中,则存储过程不会编译。同样,我不能把子查询放在CTE中并在其中进行优化;那也不编译。

Incorrect syntax near the keyword 'OPTION'. 

问:

有什么办法,我可以用一个CTE或子查询中的OPTIMIZE FOR条款?我更喜欢使用CTE,因为它们通常更清洁,更清晰。

回答

-1

option关键字必须始终放在最外面的选择查询的末尾。

例如:

declare @var int = 1; 

with cte 
as (
    select @var as val 
) 
select * from cte 
option (optimize for (@var = 2)) 
+0

从这个问题:“我已经把我的查询结束下面......不过,我得到下面的错误。” – 2013-04-26 13:03:13

+0

也许你可以发布你正在尝试运行的SQL。 – muhmud 2013-04-26 13:20:50