添加具有主键的现有表的列

时间:2014-01-22 05:40:16

标签: sql-server composite-primary-key

我需要你的帮助......,请帮帮我

我想将新主键添加到已有3列作为复合主键的现有表中。但是,我不想丢弃旧的主键,因为有很多记录,旧的主键也与其他表有关系

当我使用此查询时:

alter table hem154
  add indexNO uniqueidentifier default newid()

alter table hem154 
  add CONSTRAINT pk_hem154_indexNo PRIMARY KEY (PK_indexNO) 

注意:

  • Hem154~表名
  • indexNo~要添加的列名

我收到此运行时错误:

  

Msg 1779,Level 16,State 0,Line 1
  表'hem154'已经定义了一个主键。
  Msg 1750,Level 16,State 0,Line 1
  无法创建约束。查看以前的错误。

请帮帮我,我该怎么办?

由于

5 个答案:

答案 0 :(得分:1)

每个表只能有一个主键。您可以添加第二个表格,将新PK映射到旧PK,也可以删除旧PK并添加新PK。删除PK不会丢弃列,它只是停止使用它们作为复合键。任何依赖旧密钥的表都应该更新,以支持您决定的任何答案。

答案 1 :(得分:0)

删除所有主键并再次添加所有主键

ALTER TABLE hem154
  DROP PRIMARY KEY,ADD PRIMARY KEY (col1,col2,indexNO);

答案 2 :(得分:0)

首先DROP存在PRIMARY KEY并添加新的复合PRIMARY KEY。

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

然后尝试使用您的代码

答案 3 :(得分:0)

没有简单的方法可以做到这一点。根据您的问题,我了解您要在现有主键上添加一个附加列。如果它们具有现有关系,那么在不首先丢弃这些FK约束的情况下就不可能这样做。即使你这样做,你也无法再次重新建立那些FK约束,因为你修改了PK。

如果您不需要重新建立这些FK关系,那么您可以这样做:

  1. 删除所有FK关系
  2. 删除现有的PK(不会删除数据,只会删除约束)
  3. 添加新列
  4. 重新创建PK以包含新列
  5. 但是,如果你不能放弃现有的FK约束,那么恐怕这是不可能的

答案 4 :(得分:0)

在Microsoft SQL Server Management Studio上:

  1. 选择/突出显示两列
  2. 右键单击任一
  3. 按“设置主键”