Если у вас есть обычный запрос выбора:
SELECT *
FROM person
WHERE name = 'smith'
Чтобы создать таблицу, которую вы используете INTO:
SELECT *
INTO person_only_smith
FROM person
WHERE name = 'smith'
Это может работать, только если таблица не существует,Если таблица существует, используйте:
INSERT INTO person_only_smith
SELECT *
FROM person
WHERE name = 'smith'
-
В вашем случае INTO делает окончательный выбор (не в CTE)
Select
mpp_id,
mpp_firstname,
mpp_lastname,
... more columns ..
INTO your_table_name
FROM ...
Теперь,вы говорите, что хотите, чтобы это задание выполнялось по расписанию, что, как бы, означает, что таблица будет иметь другое имя при каждом запуске. Для простоты вы можете сначала выбрать таблицу #temp, а затем использовать динамический sql для вставки всего в фактическую невременную таблицу. Это означает, что у вас может быть большой и сложный блок SQL, который имеет преимущество подсветки синтаксиса для простой отладки, а ваш динамический sql намного меньше и проще:
WITH
...your ctes
)
SELECT
...
INTO #mytemptable
FROM ...
Поскольку ваш #mytemptable созданвне команды, которая выполняет динамический sql, она доступна для динамического
DECLARE @sql VARCHAR(2000) = CONCAT('SELECT * INTO jobtable_', FORMAT(getutcdate(), 'yyyyMMddHHmm'), ' FROM #mytemptable');
EXEC (@sql)
Помните, что если вы создаете временную таблицу внутри динамического sql, она не доступна для кода вне контекставыполнения динамического sql
Заключительная нота;переменные имена таблиц часто доставляют неудобства, как видно из того, что необходимо перейти к динамическому sql, чтобы заставить их работать, и еще больше динамизма в приложении переднего плана для извлечения данных из них. Вместо этого рассмотрим фиксированное имя таблицы и столбец, в котором указана дата работы. Если вы сначала выберете это значение в переменной, оно будет иметь одинаковое значение для каждой строки:
DECLARE @jobdate DATETIME = getutcdate();
INSERT INTO job_log (jobdate, list,of,other,columns)
SELECT @jobdate, *
FROM person
WHERE name = 'smith'
Теперь это может быть проиндексировано для быстрого поиска, и имя таблицы всегда одинаково;повсюду меньше головной боли при кодировании и обслуживании