Saya akan mencoba untuk tidak menyalin/menempel MSDN
Tidak masalah.
CTE tidak tergantung pada eksekusi kueri:itu hanya konstruksi bahasa. Anggap saja sebagai tabel atau subquery turunan yang rapi.
Ini berarti bahwa kecuali untuk CTE rekursif (lihat nanti), semua CTE dapat dikodekan secara inline. Jika Anda menggunakan kode CTE sekali, itu untuk keterbacaan . Jika Anda menggunakan CTE dua kali atau lebih, maka CTE bersifat defensif:Anda tidak ingin membuat kesalahan dan membuat tabel turunan berbeda setiap penggunaan.
Dimana CTE digunakan dua kali atau lebih, maka kode tersebut akan dieksekusi dua kali atau lebih. Itu tidak akan dieksekusi sekali dan di-cache di tempdb.
Ringkasan:mungkin atau mungkin tidak, sama seperti jika kode itu sebaris.
Catatan:CTE rekursif hanyalah sebuah tabel turunan di dalam tabel turunan di dalam tabel turunan di dalam tabel turunan di dalam... jadi hal yang sama berlaku.
Anda dapat melihat ini di Artikel Tony Rogerson . Penggunaan tempdb akan tetap terjadi jika dikodekan sebaris. Dia juga mencatat bahwa menggunakan tabel temp bisa lebih baik karena ekspansi "makro" yang saya jelaskan di atas
FYI:hal yang sama berlaku untuk tampilan. Hanya makro.