2010-10-07 180 views
0

我有表,以下細節添加一個新的主鍵,以現有的表

表名EMPLOYEE和列

EMPID (PK smallint not null) 
EMPNAME (varchar 256 not null) 
ORG (FK smallint not null) 
FUNCTION (FK smallint not null) 
EFF_DATE (datetime null) 
AUDIT_ID (varchar null) 

現在我有一個額外的coulmn添加到該表ADD_UID,使其也主要鍵

我正在使用此查詢,但失敗。

ALTER TABLE CVADMIN.EMPLOYEE 
ADD ADD_UID varchar(32) NULL, 
CONSTRAINT PK_EMPLOYEE PRIMARY KEY [NON]CLUSTERED (ADD_UID) 
go 

表'EMPLOYEE'已經定義了一個主鍵。

編輯

這裏的想法是新列應該是唯一的,所以有些代碼操作完成

+2

我想你可能必須先刪除原來的主鍵,然後根據需要創建一個新的主鍵。只記得你每個表只能有一個主鍵,以爲你可以有更多的唯一鍵。 – 2010-10-07 08:51:22

+0

因爲在其他地方引用(2places),所以放棄第一個關鍵點並不是好主意。如何確保這個額外的柱子ADD_ID取得獨特的價值 – GustyWind 2010-10-07 08:57:16

回答

4

要添加唯一的約束(這是額外的,如果它失敗,我可以拋出_KEY_VIOLATION主鍵)做到這一點:

ALTER TABLE EMPLOYEE ADD CONSTRAINT uc_UID UNIQUE (ADD_UID) 
+0

謝謝這個作品!我在這裏有一個問題。如果我想爲未來設計數據庫,如果我在新列上添加另一個唯一約束。如何區分哪些是從JDBC角度尋求唯一 – GustyWind 2010-10-07 12:06:39

+0

我不知道我理解你的問題,但在上面的示例中,uc_UID是約束的名稱,並且假定它將出現在任何拋出的異常中,則可以使用它來派生不正確的字段。 – nickd 2010-10-08 10:51:33

-1

我們可以通過ALTER語句中的任何表添加新列,但添加的列可以null,你知道主鍵在任何欄目上不接受null
因此,我們不能通過alter語句在新添加的列上創建主鍵。

+3

'NOT NULL UNIQUE'。 – 2011-08-22 22:37:24

+0

不,這不是問題。您可以通過執行ALTER TABLE x ADD y INT NOT NULL DEFAULT 0;將默認值設置爲非空來防止空值,並且該列對於一行表也可以是唯一的。但絕對的主要指標可能只有一個。 – hynekcer 2012-11-13 22:50:40