SQL Server создает временную таблицу из другой таблицы - PullRequest
11 голосов
/ 03 февраля 2010

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

В качестве фона я портирую приложение VB 6 на .net

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

SELECT TOP 0 * INTO #temp_copy FROM temp;

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 03 февраля 2010

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

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

7 голосов
/ 03 февраля 2010

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

6 голосов
/ 03 февраля 2010

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

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

Я бы тоже сделал это, а не ТОП 0

SELECT * INTO #temp_copy FROM temp WHERE 1 = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...