我在sql server中有一个表有重复的ID,但是我不能删除那些重复的记录。现在的要求是在有重复数据的列上创建主键。有没有什么方法可以在不改变数据的情况下创建主键。
nhjlsmyf1#
不可以,无法将PRIMARY KEY约束添加到已经具有重复值的列。Creating and Modifying PRIMARY KEY Constraints:将PRIMARY KEY约束添加到表中的现有列时,数据库引擎将检查 * 现有 * 列的数据和元数据,以确保满足以下主键规则:
如果将PRIMARY KEY约束添加到具有重复值或允许空值的列中,数据库引擎将返回错误,并且不添加该约束。如果ID列是增量列,则可能的解决方法是添加一个 * 唯一筛选索引 *:
ID
CREATE UNIQUE INDEX AK_MyUniqueIndex ON dbo.MyTable (ID) WHERE ID > ... max value of existing ID here
这样,唯一性将仅应用于新添加的记录。
qv7cva1a2#
我知道这是旧的,但是,有这个想法,我想分享:1.步骤1.添加一个不可为空的int列,其默认值可以是0可选步骤。将该列更新为1,以便以后能够识别此现有记录。1.步骤2.使用唯一列或所有列的组合,使用标准rownumber()更新所有存在重复的行中的列。1.第3步:首先用ID列定义主键(因此,首先对它进行索引),然后添加第1步的列。这样你就完成了,并且有了一个特殊的列,可以帮助识别重复的记录,新的记录将被标记为0,但最好的做法是添加一个字符或数字到所有的ID,如果可能的话,并标准化(这种方法有助于以后这样做),或使用一些东西,如按年份顺序,等等。
2条答案
按热度按时间nhjlsmyf1#
不可以,无法将PRIMARY KEY约束添加到已经具有重复值的列。
Creating and Modifying PRIMARY KEY Constraints:
将PRIMARY KEY约束添加到表中的现有列时,数据库引擎将检查 * 现有 * 列的数据和元数据,以确保满足以下主键规则:
如果将PRIMARY KEY约束添加到具有重复值或允许空值的列中,数据库引擎将返回错误,并且不添加该约束。
如果
ID
列是增量列,则可能的解决方法是添加一个 * 唯一筛选索引 *:这样,唯一性将仅应用于新添加的记录。
qv7cva1a2#
我知道这是旧的,但是,有这个想法,我想分享:
1.步骤1.添加一个不可为空的int列,其默认值可以是0可选步骤。将该列更新为1,以便以后能够识别此现有记录。
1.步骤2.使用唯一列或所有列的组合,使用标准rownumber()更新所有存在重复的行中的列。
1.第3步:首先用ID列定义主键(因此,首先对它进行索引),然后添加第1步的列。
这样你就完成了,并且有了一个特殊的列,可以帮助识别重复的记录,新的记录将被标记为0,但最好的做法是添加一个字符或数字到所有的ID,如果可能的话,并标准化(这种方法有助于以后这样做),或使用一些东西,如按年份顺序,等等。