@table
cú pháp tạo một biến bảng (một bảng thực tế trong tempdb
) và hiện thực hóa các kết quả cho nó.
WITH
cú pháp xác định Biểu thức Bảng Thông thường
không được hiện thực hóa và chỉ là một Chế độ xem nội tuyến.
Hầu hết thời gian bạn sẽ tốt hơn bằng cách sử dụng tùy chọn thứ hai. Bạn đề cập rằng đây là bên trong một chức năng. Nếu đây là TVF thì hầu hết thời gian bạn muốn chúng là nội dòng thay vì đa câu lệnh để chúng có thể được mở rộng bởi trình tối ưu hóa - điều này sẽ ngay lập tức không cho phép sử dụng các biến bảng.
Tuy nhiên, đôi khi (giả sử truy vấn cơ bản đắt tiền và bạn muốn tránh nó được thực thi nhiều lần), bạn có thể xác định rằng việc cụ thể hóa các kết quả trung gian sẽ cải thiện hiệu suất trong một số trường hợp cụ thể. Có hiện không có cách nào buộc điều này cho CTE ( mà không bắt buộc hướng dẫn kế hoạch ít nhất )
Trong trường hợp đó, bạn (nói chung) có 3 lựa chọn. A @tablevariable
, #localtemp
bảng và một ##globaltemp
bàn. Tuy nhiên, chỉ cái đầu tiên trong số này được phép sử dụng bên trong một hàm.
Để biết thêm thông tin về sự khác biệt giữa các biến bảng và bảng #temp xem tại đây .