2012-08-28 113 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