Như được hiển thị trong Sử dụng biểu thức bảng chung trên MSDN, bạn có thể định nghĩa CTE là:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
và sử dụng nó như:
SELECT <column_list> FROM expression_name;
Giả sử tôi có 2 CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Một truy vấn đưa ra kết quả giống nhau cho cả hai CTE vì truy vấn bên trong là như nhau. Sự khác biệt duy nhất giữa hai điều này là cte2 có tên cột ( (name)
) được xác định trong khai báo của nó.
Khi tôi thực thi cả hai CTE, tôi không thấy bất kỳ sự khác biệt nào trong kế hoạch thực hiện.
Tôi chỉ tò mò muốn biết:
- Có gì khác biệt nếu tôi không chỉ định bất kỳ tên cột nào trong định nghĩa CTE?
- Tại sao tôi nên / không nên chỉ định tên cột trong khi tạo CTE?
- Nó có ảnh hưởng đến kế hoạch thực hiện truy vấn bởi bất kỳ cơ hội? (Theo như tôi đã thấy, nó không tạo ra sự khác biệt nào.)