я мог либо сделать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
Из того, что я понимаю, с заявлением также создает временный набор результатов.
Есть ли причина, по которой С С должно быть предпочтительнее, чем временные таблицы или наоборот?
Нет жесткого правила относительно того, когда CTE (WITH) лучше или работает лучше, чем временная таблица. Если вам нужно иметь данные для нескольких операторов ->, тогда вам нужна временная таблица, так как CTE существует только для следующего оператора. С другой стороны, использование CTE намного проще и менее громоздко, чем создавать, заполнять, манипулировать и, в конечном счете, отбрасывать временную таблицу. Итак, в конце: ** это зависит ** от вашей конкретной ситуации; если оба подхода могут выполнить эту работу, я бы сначала пошел с CTE, но если это критично для производительности, также проверите таблицу temp и возьмите выбор –
У нас был экземпляр, где использование CTE дало нам значительно худшие результаты чем использование временной таблицы. Всегда стоит попробовать оба, если ваш запрос работает с большим количеством данных (более нескольких тысяч строк). По-видимому, это может быть связано с тем, что SQL Server не сохраняет статистику (например, количество строк) для CTE, но это делает для временных таблиц. Это может привести к субоптимальным планам выполнения. – NickG