Comme indiqué dans Utilisation des expressions de table communes sur MSDN, vous pouvez définir un CTE comme:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
et l'utiliser comme:
SELECT <column_list> FROM expression_name;
Disons que j'ai suivi 2 CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Une requête génère les mêmes résultats pour les deux CTE car la requête interne est identique. La seule différence entre ces deux est que cte2 a un nom de colonne ( (name)
) défini dans sa déclaration.
Lorsque j'exécute les deux CTE, je ne vois aucune différence dans le plan d'exécution.
Je suis juste curieux de savoir:
- Quelle différence cela fait-il si je ne spécifie aucun nom de colonne dans la définition CTE?
- Pourquoi devrais-je / ne dois-je pas spécifier de noms de colonnes lors de la création de CTE?
- Cela affecte-t-il le plan d'exécution des requêtes par hasard? (Pour autant que je l'ai vu, cela ne fait aucune différence.)