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

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

Некоторое время фона я портирую приложение VB 6 на .NET

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

SELECT TOP 0 * INTO #temp_copy FROM temp;

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

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

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

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

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

11
задан DeveloperChris 3 February 2010 в 06:24
поделиться

3 ответа

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

7
ответ дан 3 December 2019 в 05:57
поделиться

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

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

7
ответ дан 3 December 2019 в 05:57
поделиться

Вы должны сделать то или иное:

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

Я бы также сделал это вместо TOP 0

SELECT * INTO #temp_copy FROM temp WHERE 1 = 0;
6
ответ дан 3 December 2019 в 05:57
поделиться