将主键改为复合键(已存在主键)

16

我试图将SQL数据库表的主键从现有键更改为一个组合键,其中不包括现有列。以下代码由于以下错误消息而无法工作:

DROP PRIMARY KEY:

 

语法不正确,靠近PRIMARY。 期望COLUMN,CONSTRAINT,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”,并将这两个操作分成两个查询来执行有所帮助。


7
请使用正确的关系型数据库标记此内容。SQL不是数据库,而是许多情况下略有不同的语言。 - Ben
你想删除主键字段还是主键约束? - dani herrera
3
请提供以下信息:1)指定您的数据库,2)剪切/粘贴完整的错误信息,3)考虑将您的命令拆分为两个“alter table”语句,4)请注意,您可能需要其他语句(例如删除约束条件),甚至可能需要删除并重新创建整个表。 - paulsm4
danihhp - 我想删除当前的主键并从两个不同的字段创建一个复合键。 - NealR
2
@NealR: 你没有回答。你使用什么关系型数据库管理系统?SQL-Server、MySQL、Oracle、Postgres、DB2还是其他的? - ypercubeᵀᴹ
1
我怀疑这是SQL Server,因此请查看此处以查找PK约束名称:在SQL Server中删除主键约束 - 简单吗?也许。也可能不是! - ypercubeᵀᴹ
1个回答

28
    /* 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 中也适用。 - user330315
1
@NealR:你没有回答问题。你使用什么关系型数据库?SQL-Server、MySQL、Oracle、Postgres、DB2还是其他的? - paulsm4
这是SQL服务器。请原谅我,我现在正在实习,对所有术语都不熟悉。 - NealR
@Ruzbeh 我知道这是一个旧问题,但我希望您能回答:在 Oracle 中,在包含数据的表中删除并创建复合主键会产生什么影响?数据会受到影响吗?(在我的情况下,我正在将一个字段添加到主键中) - user3132623

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接