【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。

一、问题

当我们在创建某个表(Class)的主键时,遇到如下报错:
【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。

消息 1505,级别 16,状态 1,第 2 行 因为发现对象名称 ‘dbo.Class’ 和索引名称
‘PK__Class__75771CE509DE7BCC’ 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为
(CP0801)。 消息 1750,级别 16,状态 0,第 2 行 无法创建约束。请参阅前面的错误消息。 语句已终止。

二、分析原因

根据报错提示,是Class有重复建的意思。
【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。
而且重复键是这个
【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。
我们可以看出,这是班级号的编号。
如果班级号有重复键是不能当主键的。
经过查询确实有重复键。
【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。

三、解决办法

那么,我们只要删掉一条重复记录,或者改班级号就行了。
如图改班级号更合适。
【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。
我们再次定义执行Class表的主键,成功了。
【数据库】因为发现对象名称 '' 和索引名称 '' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 ()。无法创建约束。