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

时间:2012-12-17 21:19:07

标签: sql database sql-server-2008 primary-key

我正在尝试将主键添加到现有表名Product_Details中新添加的列。

添加了新列:Product_Detail_IDintnot null

我正在尝试将主键添加到Product_Detail_ID(请注意:此表中没有分配其他主键或外键)

我正在尝试此查询但收到错误。

ALTER TABLE Product_Details
ADD CONSTRAINT pk_Product_Detils_Product_Detail_ID PRIMARY KEY(Product_Detail_ID)
GO

错误:

  

CREATE UNIQUE INDEX语句终止,因为找到了对象名'dbo.Product\_Details'和索引名'pk\_Product\_Detils'的重复键。重复键值为(0)。

我在这里遗漏了什么吗?我正在使用SQL Server 2008 R2。我将不胜感激任何帮助。

6 个答案:

答案 0 :(得分:30)

如果希望SQL Server自动为新列提供值,请将其设置为标识。

ALTER TABLE Product_Details DROP COLUMN Product_Detail_ID
GO
ALTER TABLE Product_Details ADD Product_Detail_ID int identity(1,1) not null
GO
ALTER TABLE Product_Details
add CONSTRAINT pk_Product_Detils_Product_Detail_ID primary key(Product_Detail_ID)
GO

答案 1 :(得分:1)

您收到错误的原因是您的现有数据未满足约束条件。

有两种方法可以解决它:

  • 在添加约束
  • 之前清理现有数据
  • 使用“WITH NOCHECK”选项添加约束,这将停止sql server检查现有数据,只检查新数据

答案 2 :(得分:1)

ALTER TABLE Jaya 
  ADD CONSTRAINT no primary key(No);

此处Jaya是表名,

no是列名,

ADD CONSTRAINT是我们提供主键关键字

答案 3 :(得分:1)

在mysql中,我能够通过以下查询实现

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

答案 4 :(得分:0)

如果您想在现有表中添加一个新列,例如 deptId,那么您可以使用以下代码进行操作。

ALTER TABLE department ADD COLUMN deptID INT;

它将创建名为 deptID 的新列。

现在,如果您想在创建新列的同时添加约束,那么您可以使用以下代码来完成。在下面的代码中,我将主键添加为约束。您也可以添加另一个约束来代替外键、默认等主键。

ALTER TABLE department ADD COLUMN deptID INT NOT NULL ADD CONSTRAINT PRIMARY KEY(deptID);

答案 5 :(得分:-1)

ķ。朋友 命令: SQL> alter table tablename add primary key(col_name);

ex:alter table pk_Product_Detils添加主键(Product_Detail_ID);