如果我有陈述
DECLARE @i INT;
DECLARE @d NUMERIC(9,3);
SET @i = 123;
SET @d = @i;
SELECT @d;
我包含实际执行计划并运行此查询,我没有得到执行计划。只有在批处理中有FROM
语句时,查询才会触发执行计划吗?
答案 0 :(得分:3)
简单答案是,如果没有表访问权限,您将无法获得执行计划。
执行计划是优化器生成的:它根据索引,统计信息等计算满足查询的最佳方法。
上面的内容很简单,没有表格访问权限。你为什么需要一个计划?
编辑:
根据Lucero在评论中的示例
,派生表是表访问权限编辑2:
“普通”表访问提供持续扫描,而不是真正的扫描或搜索:
SELECT * FROM sys.tables WHERE 1=0
答案 1 :(得分:1)
你的意思是什么会触发执行计划?另外我不明白我包含实际执行计划并运行此查询,我没有得到执行计划。希望这个链接可以帮到你。
答案 2 :(得分:1)
我认为只要需要执行基于集合的操作,就会生成查询计划。
答案 3 :(得分:1)
是的,你需要一个from子句。
你可以这样做
declare @i int
declare @d numeric(9,3)
set @i = 123
select @d = @i
from (select 1) as x(x)
select @d
在执行计划中,你会看到这个
<ScalarOperator ScalarString="CONVERT_IMPLICIT(numeric(9,3),[@i],0)">