【问题标题】:Change Primary Key to Composite Key (Primary Key already exists)将主键更改为复合键(主键已存在)
【发布时间】:2012-08-23 11:00:22
【问题描述】:

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

删除主键:

PRIMARY 附近的语法不正确。期望 COLUMN、CONSTRAINT、ID 或 QUOTED_ID

添加主键:

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)

我需要告诉它“DROP CONSTRAINT”,而不是请求 SQL“DROP PRIMARY KEY”,将这两个操作分成两个查询也有帮助。

【问题讨论】:

  • 请用正确的 RDBMS 标记它。 SQL不是数据库;它是一种被许多人使用的语言(在每种情况下略有不同)。
  • 要删除 PK 字段还是 PK 约束?
  • 请:1) 指定您的数据库,2) 剪切/粘贴确切的错误消息,3) 考虑将您的命令分成两个“alter table”语句,4) 请注意您可能需要其他语句(例如删除约束),或者您甚至可能必须删除并重新创建整个表
  • @NealR:你没有回答。您使用什么 RDBMS? SQL-Server、MySQL、Oracle、Postgres、DB2,还有一个?
  • 我怀疑它是 SQL-Server,所以在这里看看如何找到 PK 约束名称:Dropping a Primary Key Constraint in SQL Server – is it easy? May be. May be not!

标签: sql sql-server primary-key composite-primary-key


【解决方案1】:
    /* 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)

【讨论】:

  • ALTER TABLE .. DROP PRIMARY KEY 如果我没记错的话也适用于 Oracle
  • @NealR:你没有回答。您使用什么 RDBMS? SQL-Server、MySQL、Oracle、Postgres、DB2,还有一个?
  • 它是 SQL 服务器。对不起,我现在正在实习,不熟悉所有条款。
  • @Ruzbeh 我知道这是一个老问题,但我希望你能回答这个问题:在 Oracle 中,在包含数据的表中删除和创建复合主键有什么影响?数据会受到影响吗? (就我而言,我在主键中添加了一个字段)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2018-04-07
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多