Как показано в разделе Использование общих табличных выражений в 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)
), определенное в его объявлении.
Когда я выполняю оба CTE, я не вижу никакой разницы в плане выполнения.
Мне просто интересно узнать:
- Какая разница, если я не указываю имена столбцов в определении CTE?
- Почему я должен / не должен указывать имена столбцов при создании CTE?
- Повлияло ли это на план выполнения запроса случайно? (Насколько я видел, это не имеет никакого значения.)