SQL Server создание временной таблицы из другой таблицы

Я ищу временную таблицу, которая используется в качестве промежуточной таблицы при компиляции отчета.

для немного фона я переношу приложение VB 6 на .net

чтобы создать таблицу, которую я могу использовать...

SELECT TOP 0 * INTO #temp_copy FROM temp;

это создает пустую копию temp, но не создает первичный ключ

есть ли способ, чтобы создать временную таблицу, плюс ограничения?

должен ли я создавать ограничения потом?

или мне лучше просто создать таблицу с помощью create table, я не хотел этого делать, потому что в таблице есть 45 столбцов, и это заполнит процедуру большим количеством ненужного cruft.

таблица требуется, потому что многие люди могут создавать отчеты одновременно, поэтому я не могу использовать одну промежуточную таблицу

3 ответов


вам действительно нужен первичный ключ? Если вы мерцаете и выбираете только данные, необходимые для отчета, вам все равно не придется посещать каждую строку в таблице temp?


по дизайну, SELECT INTO не переносит ограничения (PK, FK, Unique), значения по умолчанию, проверки и т. д. Это связано с тем, что SELECT INTO может фактически вытягивать из многочисленных таблиц сразу (через соединения в предложении FROM). Поскольку SELECT INTO создает новую таблицу из указанных вами таблиц, SQL действительно не может определить, какие ограничения вы хотите сохранить, а какие нет.

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


вам придется сделать одно или другое:

  • добавить PK/индексы после
  • явно объявить временную таблицу с ограничениями.

Я бы также сделал это, а не топ 0

SELECT * INTO #temp_copy FROM temp WHERE 1 = 0;