2

设置:

我正在试验OPTIMIZE FORSQL Server 2008 R2 中的子句。我已将以下内容放在查询的末尾。

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'.

问题:

有什么方法可以OPTIMIZE FOR在 CTE 或子查询中使用子句?我更喜欢使用 CTE,因为它们通常更干净、更易读。

4

1 回答 1

1

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

例如:

declare @var int = 1;

with cte
as (
    select @var as val
)
select * from cte
option (optimize for (@var = 2))
于 2013-04-26T08:37:30.650 回答