Як показано у використанні загальних табличних виразів на 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?
- Чи це впливає на план виконання запитів випадково? (Наскільки я бачив, це не має ніякої різниці.)