在CTE或子查询中优化

时间:2013-04-25 15:21:45

标签: sql-server sql-server-2008-r2 query-optimization common-table-expression

设定:

我正在尝试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移动到子查询中,则存储的proc不会编译。同样,我不能将子查询放在CTE中并在其中进行优化;也不编译。

Incorrect syntax near the keyword 'OPTION'.

问题:

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

1 个答案:

答案 0 :(得分:-1)

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

例如:

declare @var int = 1;

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