Таблицы Temp физически создаются в базе данных Tempdb, а CTE не материализуется. Они создаются в памяти и удаляются сразу после следующего оператора.
Это неправильно.CTE
не создается, это не структура, содержащая данные.Это как view
с той лишь разницей, что его определение не сохраняется как объект.Как следствие, он не может быть повторно использован в других утверждениях.Это просто еще одна форма написания производной таблицы.
Например, когда вы пишете
with USAcusts as
(
select custid, companyname
from sales.customers
where country = N'USA'
)
select * from USAcusts;
Это то же самое, что и код ниже:
select *
from
(
select custid, companyname
from sales.customers
where country = N'USA'
) t
Ни один из CTE
или derived table
не созданв памяти ", как и в случае view
, SQL Server расширяет определение табличного выражения и запрашивает базовые объекты напрямую .