【发布时间】:2017-11-08 13:48:41
【问题描述】:
我正在尝试在 SQL Server 2012 SP3 企业版中为应用程序运行的特定查询创建计划指南,这意味着我无法以任何方式更改查询。
查询如下所示:
(@P1 nvarchar(5),@P2 bigint)
DELETE FROM INVENTSUMDELTA WHERE ((DATAAREAID=@P1) AND (TTSID=@P2))
为了创建计划指南,我使用了以下查询:
EXEC sp_create_plan_guide
@name = N'INVENTSUMDELTAINDEX',
@stmt = N'DELETE FROM INVENTSUMDELTA WHERE ((DATAAREAID=@P1) AND (TTSID=@P2))',
@type = N'SQL',
@module_or_batch = NULL,
@params = N'@P1 nvarchar(5),@P2 bigint',
@hints = N'OPTION (TABLE HINT ( INVENTSUMDELTA, INDEX( I_2397TTSDIMIDX )))';
但是,我收到一个错误:
消息 8724,第 16 级,状态 1,第 1 行 无法执行查询。不能在 TABLE HINT 子句中指定表值或 OPENROWSET 函数“INVENTSUMDELTA”。
我检查了文档,发现以下内容:
表格提示 (exposed_object_name [ , [ [, ]...n ] ] ) 将指定的表提示应用于与exposed_object_name 对应的表或视图。 [...]
exposed_object_name 可以是以下引用之一:
当查询的 FROM 子句中的表或视图使用别名时,exposed_object_name 是别名。
不使用别名时,exposed_object_name 与 FROM 子句中引用的表或视图完全匹配。例如,如果使用两部分名称引用表或视图,则exposed_object_name 是相同的两部分名称。
据此,我认为应该可以为不使用别名的查询创建计划指南。但是,我无法让它工作。
所以我的问题是:如何在不使用别名且不更改原始查询的情况下创建计划指南?
【问题讨论】:
-
有一个表(在 dbo 模式中),但没有 UDF。
标签: sql-server sql-server-2012