Jag ska försöka att inte kopiera/klistra in MSDN
Det spelar ingen roll.
En CTE är oberoende av frågekörning:den är bara en språkkonstruktion. Se det som en snygg härledd tabell eller underfråga.
Detta innebär att förutom rekursiva CTE (se senare), alla CTE kan kodas inline. Om du använder CTE-koden en gång är det för läsbarhet . Om du använder CTE två gånger eller mer är det defensivt:du vill inte göra ett misstag och ha den härledda tabellen olika för varje användning.
Om en CTE används två gånger eller mer, kommer den koden att exekveras två eller fler gånger. Det kommer inte att köras en enda gång och cachelagras i tempdb.
Sammanfattning:det kan eller kanske inte, precis som om koden var inbyggd.
Notera:en recursve CTE är helt enkelt en härledd tabell inuti en härledd tabell inuti en härledd tabell inuti en en härledd tabell inuti en der... så detsamma gäller.
Du kan se detta i Tony Rogersons artikel . Användningen av tempdb skulle hända ändå om den kodades inline. Han noterar också att användningen av en temptabell kan vara bättre på grund av "makro"-expansionen som jag förklarade ovan
FYI:detsamma gäller visningar. Bara makron.