Jak pokazano w sekcji Używanie typowych wyrażeń tabelowych w MSDN, możesz zdefiniować CTE jako:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
i używaj go w następujący sposób:
SELECT <column_list> FROM expression_name;
Powiedzmy, że mam 2 następujące CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Zapytanie wyprowadza takie same wyniki dla obu CTE, jak zapytanie wewnętrzne jest takie samo. Jedyną różnicą między tymi dwoma jest to, że cte2 ma nazwę kolumny ( (name)
) zdefiniowaną w deklaracji.
Kiedy wykonuję oba CTE, nie widzę żadnej różnicy w planie wykonania.
Jestem tylko ciekawy, aby wiedzieć:
- Co to za różnica, jeśli nie podam żadnych nazw kolumn w definicji CTE?
- Dlaczego powinienem / nie powinienem określać nazw kolumn podczas tworzenia CTE?
- Czy przypadkiem wpływa to na plan wykonania zapytania? (O ile widziałem, to nie ma znaczenia.)