Wie unter Verwenden allgemeiner Tabellenausdrücke in MSDN gezeigt, können Sie einen CTE wie folgt definieren:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
und benutze es wie:
SELECT <column_list> FROM expression_name;
Angenommen, ich habe folgende 2 CTEs
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Eine Abfrage gibt für beide CTEs dieselben Ergebnisse aus wie die innere Abfrage. Der einzige Unterschied zwischen diesen beiden besteht darin, dass in cte2 der Spaltenname ( (name)
) in seiner Deklaration definiert ist.
Wenn ich beide CTEs ausführe, sehe ich keinen Unterschied im Ausführungsplan.
Ich bin nur neugierig zu wissen:
- Welchen Unterschied macht es, wenn ich in der CTE-Definition keine Spaltennamen spezifiziere?
- Warum sollte / sollte ich beim Erstellen von CTE keine Spaltennamen angeben?
- Beeinflusst es zufällig den Ausführungsplan für Abfragen? (Soweit ich gesehen habe, macht es keinen Unterschied.)