Jeg vil prøve ikke at kopiere/indsætte MSDN
Det er lige meget.
En CTE er uafhængig af forespørgselsudførelse:den er kun en sprogkonstruktion. Tænk på det som en pæn afledt tabel eller underforespørgsel.
Dette betyder, at bortset fra rekursive CTE'er (se senere), alle CTE'er kan kodes inline. Hvis du bruger CTE-koden én gang, er det for læsbarhed . Hvis du bruger CTE to gange eller mere, så er det defensivt:du vil ikke lave en fejl og have den afledte tabel forskellig for hver brug.
Hvor en CTE bruges to gange eller mere, vil den kode blive udført to gange eller mere. Det vil ikke blive udført én gang og cachelagret i tempdb.
Resumé:det kan eller ikke, ligesom hvis koden var inline.
Bemærk:en recursve CTE er simpelthen en afledt tabel inde i en afledt tabel inde i en afledt tabel inde i en en afledt tabel inde i en der... så det samme gælder.
Du kan se dette i Tony Rogersons artikel . Brugen af tempdb ville ske alligevel, hvis den blev kodet inline. Han bemærker også, at brugen af en midlertidig tabel kan være bedre på grund af den "makro"-udvidelse, jeg forklarede ovenfor.
FYI:det samme gælder for visninger. Bare makroer.