2014-01-22 4 views
0

мне нужна ваша помощь ...., пожалуйста, помогите мнеДобавление столбца с существующей таблицы, которые имеют первичный ключ

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

Когда я использую этот запрос:

alter table hem154 
    add indexNO uniqueidentifier default newid() 

alter table hem154 
    add CONSTRAINT pk_hem154_indexNo PRIMARY KEY (PK_indexNO) 

Примечания:

  • Hem154 ~ Название таблицы
  • indexNo ~ Имя столбца, который будет добавлен к

Я получаю эту ошибку во время выполнения:

Msg 1779, Level 16, State 0, Line 1
Table 'hem154' already has a primary key defined on it.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

Пожалуйста, помогите мне, как я могу это сделать ???

Благодаря

+0

вам следует сбросить и снова добавить все первичные ключи –

+1

Вы ** НЕ МОЖЕТЕ ** иметь несколько первичных ключей для любой данной таблицы. Ни за что. Никакой трюк. Нет взлома. Просто невозможно. –

ответ

0

Отбросьте все первичные ключи и добавьте снова все первичные ключи

ALTER TABLE hem154 
    DROP PRIMARY KEY,ADD PRIMARY KEY (col1,col2,indexNO); 
+0

Я пробовал ваш код, но ничего другого.Я все равно получаю ту же ошибку, пожалуйста, еще одно решение для ее решения !!! спасибо за внимание ура –

1

Вы можете иметь только один первичный ключ для каждой таблицы. Вы можете либо добавить вторую таблицу, которая сопоставляет ваш новый ПК с старым ПК, либо отбросить старый ПК и добавить новый. Удаление PK не приведет к удалению столбцов, но просто перестает использовать их в качестве составного ключа. Любые таблицы, которые полагались на старый ключ, вероятно, должны быть обновлены, чтобы поддерживать любой ответ, который вы принимаете.

0

Первый DROP существующий PRIMARY KEY и ADD новый композитный ПЕРВИЧНЫЙ КЛЮЧ.

ALTER TABLE Table1 
DROP CONSTRAINT PK_Table1_Col1 
GO 

, а затем попробовать ваш код

+0

пример: ALTER TABLE Hem154 DROP ПЕРВИЧНЫЙ КЛЮЧ, ДОБАВИТЬ ПЕРВЫЙ КЛЮЧ (indexNo, rollno); – vengets

+0

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

+0

Вы можете воссоздать эти ограничения, если это проще .. – vengets

0

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

Если вам не нужно, чтобы восстановить эти отношения FK, то вы можете сделать это:

  1. Отбросьте все FK отношения
  2. падение существующих ПК (данные не будут удалены, только ограничение будет отброшен)
  3. Добавить новый столбец
  4. Recreate PK, чтобы включить новый столбец

Однако, если вы не можете DRO p существующие ограничения FK, то я боюсь, что это невозможно.

+0

Г-н Радж, Спасибо за внимание. Итак, вывод заключается в том, что я должен отказаться от ограничений PK и FK, чтобы добавить новый столбец, который хочет установить как ПК? Нет ли другого пути? Я не хочу потерять связь с другой таблицей. –

+0

Если вы не хотите потерять отношения с другими таблицами, то единственным способом было бы изменить эти ключи, чтобы включить новый столбец PK, обновить данные и затем восстановить отношения – Raj

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