2015-05-08 2 views
3

У меня есть база данных Mircrosoft Sql Server, состоящая из 8 таблиц, которые все связаны с тем, что я пытаюсь обновить. Для этого я создать несколько временных таблицыИсключение основного ключа SQL

"CREATE TABLE [vehicle_data].[dbo].[temp_MAINTENANCE_EVENT] (" + 
         "[maintenance_event_id] int," + 
         "[maintenance_computer_code_id] int," + 
         "[veh_eng_maintenance_id] int," + 
         "CONSTRAINT [PK_maintenance_event_id"] PRIMARY KEY CLUSTERED ([maintenance_event_id] ASC))"; 

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

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

Исключение: Существует уже объект с именем «PK_maintenance_event_id» в базе данных. Не удалось создать ограничение.

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

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

+0

Вам нужно сохранить имя PK? Если нет, то просто не называйте его, и SqlServer будет составлять для него уникальное имя. – RBarryYoung

+0

Ha! Просто заметил, что парень в большом красном «Ад» справа - мой друг. Ницца. :-) – RBarryYoung

+0

Я не вижу Ad haha, но любая идея синтаксиса для этого? – nastassiar

ответ

3

Если временные таблицы необходимы это ограничение

При создании использования

CONSTRAINT [PK_maintenance_event_id_temp"] 

вместо

CONSTRAINT [PK_maintenance_event_id] 

при переименовании темпа обратно в реальную таблицу

exec sp_rename [PK_maintenance_event_id_temp], [PK_maintenance_event_id] 
Смежные вопросы