SQL Server с предложением и временной таблицей

Я мог бы сделать

select * into #randomTenUsers from
(select top 10 * from users)x    

select * from #randomTenUsers

ИЛИ

WITH randomTenUsers   as (select top 10 * from users)    

select * from randomTenUsers

Из того, что я понимаю, оператор WITH также создает временный набор результатов.

Есть ли причина, по которой СОО должно быть предпочтительнее, чем временные таблицы или наоборот?

Ответ 1

Из того, что я понимаю, оператор WITH также создает временный набор результатов.

Нет. Использование CTE не создаст "временный результирующий набор". Могут быть причины для запроса для создания рабочих таблиц, но только потому, что вы используете CTE, не является одним из них.

Эти два запроса имеют идентичный план запросов, и ни один из них не создает временный результат, например, временную таблицу в tempdb.


with randomTenUsers as
(
  select top 10 *
  from users
)    
select * 
from randomTenUsers;

select * 
from (
     select top 10 * 
     from users
     ) x;

Как отметил marc_s в комментарии, то, что вы должны использовать, зависит от того, что вы хотите сделать. Бывают ситуации, когда создание временной таблицы имеет смысл и есть ситуации, когда это совершенно необязательно.