2010-02-03 4 views
10

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

Для немного фона я портирование приложения VB 6 в .net

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

SELECT TOP 0 * INTO #temp_copy FROM temp; 

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

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

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

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

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

ответ

7

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

+0

Я нашел полезным добавлять индексы в таблицы temp в случаях с впечатляющими результатами. Может быть промежуточная обработка или JOINs и т. Д. – gbn

+1

@gbn: обязательно. Я добавляю их, когда они нужны. –

+0

Вы правы, это может быть лишним. Мне нужно будет проверить каждую процедуру. Первоначально приложение использовало одну временную таблицу с первичным ключом, но число пользователей было небольшим, теперь меня беспокоит, что временная таблица станет узким местом, так как есть еще много пользователей. – DeveloperChris

6

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

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

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

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

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

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

+0

Спасибо за объяснение, что довольно очевидно, я полагаю, однажды вы видите причину. – DeveloperChris

Смежные вопросы