sql-server 在sql server中创建主键

brgchamk  于 2022-10-31  发布在  SQL Server
关注(0)|答案(2)|浏览(262)

我在sql server中有一个表有重复的ID,但是我不能删除那些重复的记录。现在的要求是在有重复数据的列上创建主键。有没有什么方法可以在不改变数据的情况下创建主键。

nhjlsmyf

nhjlsmyf1#

不可以,无法将PRIMARY KEY约束添加到已经具有重复值的列。
Creating and Modifying PRIMARY KEY Constraints:
将PRIMARY KEY约束添加到表中的现有列时,数据库引擎将检查 * 现有 * 列的数据和元数据,以确保满足以下主键规则:

  • 列不允许空值。
    • 不能有重复的值 *。

如果将PRIMARY KEY约束添加到具有重复值或允许空值的列中,数据库引擎将返回错误,并且不添加该约束。
如果ID列是增量列,则可能的解决方法是添加一个 * 唯一筛选索引 *:

CREATE UNIQUE INDEX AK_MyUniqueIndex ON dbo.MyTable (ID)
WHERE ID > ... max value of existing ID here

这样,唯一性将仅应用于新添加的记录。

qv7cva1a

qv7cva1a2#

我知道这是旧的,但是,有这个想法,我想分享:
1.步骤1.添加一个不可为空的int列,其默认值可以是0可选步骤。将该列更新为1,以便以后能够识别此现有记录。
1.步骤2.使用唯一列或所有列的组合,使用标准rownumber()更新所有存在重复的行中的列。
1.第3步:首先用ID列定义主键(因此,首先对它进行索引),然后添加第1步的列。
这样你就完成了,并且有了一个特殊的列,可以帮助识别重复的记录,新的记录将被标记为0,但最好的做法是添加一个字符或数字到所有的ID,如果可能的话,并标准化(这种方法有助于以后这样做),或使用一些东西,如按年份顺序,等等。

相关问题