2012-08-28 81 views
9

我試圖將現有鍵中的SQL數據庫中的表的主鍵更改爲不包含現有列的組合鍵。下面的代碼是不是由於以下錯誤消息的工作:將主鍵更改爲複合鍵(主鍵已存在)

DROP PRIMARY KEY:

附近有語法錯誤PRIMARY。期待COLUMN,約束ID,或 QUOTED_ID

ADD PRIMARY KEY:

附近有語法錯誤PRIMARY。期待ID

T-SQL代碼:

ALTER TABLE AgentIdentification 
DROP PRIMARY KEY Number, 
ADD PRIMARY KEY (AgentId, IdIndicator) 

編輯

我能夠通過使用以下兩種查詢語句

ALTER TABLE AgentIdentification 
DROP CONSTRAINT [PK_AgentId_Id] 
GO 

ALTER TABLE AgentIdentification 
ADD CONSTRAINT pk_PersonID PRIMARY KEY (AgentId, IdIndicator) 

相反的要求,要做到這一點SQL「DROP PRIMARY KEY」我需要告訴它「DROP CONSTRAINT」,同時分隔這兩個操作i nto兩個疑問幫助。

+7

請使用正確的RDBMS標記這一點。 SQL不是數據庫;這是許多人使用的語言(每種情況都略有不同)。 – Ben

+0

你想放棄PK領域還是PK約束? – danihp

+3

請:1)指定你的數據庫,2)剪切/粘貼確切的錯誤信息,3)考慮將你的命令分解爲兩個「alter table」語句,4)注意你可能需要其他語句),或者甚至可能需要刪除並重新創建整個表格 – paulsm4

回答

20
/* For SQL Server/Oracle/MS ACCESS */ 
    ALTER TABLE AgentIdentification 
    DROP CONSTRAINT PK_Table1_Col1 


    /* For MySql */ 
    ALTER TABLE AgentIdentification 
    DROP PRIMARY KEY 

添加主鍵:

MySQL/SQL Server/Oracle/MS Access: 

ALTER TABLE Table1 
ADD CONSTRAINT pk_PersonID PRIMARY KEY (AgentId, IdIndicator) 
+1

'ALTER TABLE .. DROP PRIMARY KEY'也適用於Oracle,如果我沒有弄錯 –

+1

@NealR:你沒有回答。你使用什麼RDBMS? SQL-Server,MySQL,Oracle,Postgres,DB2,另一個呢? – paulsm4

+0

它是SQL服務器。你將不得不原諒我,我現在正在實習並且不熟悉所有條款。 – NealR