如在MSDN上使用通用表表达式中所示,可以将CTE定义为:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
并像这样使用它:
SELECT <column_list> FROM expression_name;
假设我有2个CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
由于内部查询相同,因此两个CTE的查询输出结果相同。两者之间的唯一区别是cte2(name)
在其声明中定义了列name()。
当我执行两个CTE时,执行计划没有任何区别。
我只是好奇地知道:
- 如果我在CTE定义中未指定任何列名,会有什么区别?
- 为什么在创建CTE时应该/不应该指定列名?
- 它是否会偶然影响查询执行计划?(据我所知,这没有任何区别。)