2010-11-10 59 views
2

我想將使用複合主鍵的表遷移到唯一的主鍵。如何在SQL中從組合主鍵遷移到單個屬性鍵?

我的表是如下:

CREATE TABLE REGM 
    ( 
    LNG_CD VARCHAR2(2 BYTE) NOT NULL ENABLE, 
    REG_NRI NUMBER(10,0) NOT NULL ENABLE, 
    ...  
    CONSTRAINT PK_REGM PRIMARY KEY (LNG_CD, REG_NRI) ENABLE, 
); 

表REGM使用LNG_CD和REG_NRI作爲複合主鍵。我想使用主鍵名稱REGM_PK來代替,但仍然使用LNG_CD和REG_NRI作爲外鍵。

到目前爲止,這是我的方法:

1 - 刪除該限制

ALTER TABLE REGM DROP CONSTRAINT PK_REGM; 

2 - 添加主鍵列

ALTER TABLE REGM ADD REGM_PK NUMBER(19,0); 

3 - 創建序列

CREATE SEQUENCE REGM_SEQ MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 2 CACHE 20 NOORDER NOCYCLE ; 

4 - 與序列

5填寫列 - 使REGM_PK列不爲空

6 - 創建主鍵約束

到目前爲止,我擋在步驟#4

我知道我也可以做一個創建/複製日期/刪除表。但我寧願用SQL方式來做。

+0

標題是你想要什麼不良的解釋。任何主鍵都是唯一的 - 包括複合鍵。看起來你真正想要的是用一個屬性鍵替換一個複合鍵。 – sqlvogel 2010-11-10 16:29:48

+0

@dportas謝謝,修正 – 2010-11-10 16:42:26

回答

2

第4步:

UPDATE regm 
SET  regm_pk = REGM_SEQ.nextval