2014-01-22 75 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映射到舊PK的表格,或者刪除舊PK並添加新PK。刪除PK不會刪除列,它只是停止使用它們作爲組合鍵。任何依賴舊密鑰的表都應該更新以支持您決定的任何答案。

0

第一個DROP存在PRIMARY KEY並添加新的複合PRIMARY KEY。

ALTER TABLE Table1 
DROP CONSTRAINT PK_Table1_Col1 
GO 

,然後嘗試你的代碼

+0

例如:ALTER TABLE Hem154 DROP PRIMARY KEY,ADD PRIMARY KEY(indexNo,rollno); – vengets

+0

所以你相信,我必須放棄PK。但我不能這樣做,因爲它會失去與其他表的關係,是否有其他解決此問題的選擇? –

+0

您可以重新創建這些約束,如果它更簡單.. – vengets

0

有這樣的沒有簡單的方法。從你的問題,我知道你想添加一個額外的列到現有的主鍵。如果他們有現有的關係,那麼不可能做到這一點,而不必先放棄這些FK約束。即使你這樣做,你也不能再次重新建立這些FK約束,因爲你修改了PK。

如果您不需要重新建立的FK關係,那麼你可以這樣做:

  1. 丟棄所有的FK關係
  2. 刪除現有的PK(數據不會被刪除,只有約束將被丟棄)
  3. 添加新列
  4. 重新創建PK,以包括新列

但是,如果你不能DRO p現有的FK限制,那麼恐怕這是不可能的

+0

Mr. Raj,感謝您的關注....所以,結論是我必須放棄PK和FK限制,以便能夠添加一個新列設置爲PK?是否沒有其他方式?我不想失去與另一個表的關係 –

+0

如果你不想失去與其他表的關係,那麼唯一的辦法就是修改這些關鍵字以包含你的新PK列,更新數據然後重新建立關係 – Raj