ดังที่แสดงในการใช้ Common Table Expressionsบน 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
- มันมีผลต่อแผนการดำเนินการแบบสอบถามโดยบังเอิญหรือไม่? (เท่าที่ฉันได้เห็นมันไม่ได้สร้างความแตกต่าง)