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

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

Для небольшого фона я переношу приложение VB 6 в .net

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

SELECT TOP 0 * INTO #temp_copy FROM temp;

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

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

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

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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

Вам нужно будет сделать одно или другое:

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

Я бы тоже сделал это, а затем TOP 0

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