【问题标题】:Duplicate records in a table with identity column as PK标识列为 PK 的表中的重复记录
【发布时间】:2019-11-28 20:45:29
【问题描述】:

我们的一位开发人员将几百万行从表中插入到目标表中。 他使用while循环批量插入,现在在目标表中有大约500万个重复行。问题是PK是标识列,插入时他没有这样做

SET IDENTITY_INSERT DBO.TABLE_NAME ON

所以现在表中存在具有不同标识列值的重复条目。

如果我按如下所示分组:

group by COL2,COL3,COL4,COL5,COL6,COL7

我可以得到一个唯一的行。

谁能帮我创建脚本来删除重复记录。

【问题讨论】:

  • 发布示例数据并阐明您认为哪些行重复并且要删除。
  • 这不是脚本服务站点,如果遇到特定错误,请尝试提出解决方案并寻求帮助
  • 这与 SET IDENTITY_INSERT ON 无关。插入的代码显然存在插入重复记录的缺陷,并且您没有任何唯一索引来强制唯一性。关于如何删除除一行重复行之外的所有其他问题,这里回答了很多其他问题,但这里的问题陈述不是很准确或清楚。
  • 您在问题中甚至没有说清楚。如前所述,您听起来好像您认为这是生成重复项的原因。请返回并编辑您的问题以澄清它是什么,您在问什么,并显示示例。如果没有人知道你在问什么或为什么,没有人可以提供帮助。
  • 那么你为什么不让你的“开发者”来写脚本呢?或者也许你们两个可以一起工作并从经验中学习?看来这里还有改进的余地。

标签: sql-server group-by insert primary-key identity


【解决方案1】:

为您的表的最终不同记录创建#temp 表。之后,从您的表中删除所有具有重复 id 的记录。

之后,您可以使用此#temp 表在您现有的表中重新输入此记录。

set identity insert on/off 由你决定。

提示搜索checkident

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多