【问题标题】:SQL Server 2000 incorrect message: duplicate key with unique indexSQL Server 2000 错误消息:具有唯一索引的重复键
【发布时间】:2010-03-11 14:10:16
【问题描述】:

数据库服务器:SQL Server 2000 - 8.00.760 - SP3 - 标准版

我有一个包含 5 列的表,我想在其中添加大量 (300.000) 条记录。两列的组合有一个唯一索引。如果我添加具有此唯一索引的记录,SQL Server 会给出以下错误消息:

消息 2601,第 14 级,状态 3,第 1 行 无法在具有唯一索引“test”的对象“TESTTABLE”中插入重复的键行。 该语句已终止。

(0 行受影响)

但是,如果我删除唯一索引然后添加记录,之后创建此唯一索引时不会出现任何错误。

【问题讨论】:

  • 添加记录用什么?
  • Microsoft SQL Server Management Studio Express 9.00.2047.00 - 一个插入查询,它从不同服务器上的表中选择记录,该表由同一数据库中的表连接,其中包含我想要添加 >300k 记录的表到。

标签: sql-server


【解决方案1】:

检查哪些字段构成您的唯一索引。

在导致 INSERT 失败的那些字段的源数据中存在重复。

您对此采取的措施取决于数据的性质。如果只是一排比另一排更新,使原来的过时,那么你可以摆脱。否则,请与您的业务人员讨论:-

  • 您应该如何处理欺骗数据
  • 是否唯一约束 列是必要的

有些问题很容易解决。对于这个,您的大多数解决方案实际上都是非技术性的。

【讨论】:

  • 据我所知,我想添加的记录中没有重复数据。因为如果我在没有这个索引的情况下添加记录,我不会收到错误消息,并且我可以在添加记录后添加这个唯一索引。但是我第一次创建唯一索引时无法添加记录!
【解决方案2】:

你的一个假设一定是错误的。重新访问他们。您的索引的性质、传入的数据、预先存在的数据(如果有)、排序规则(不区分大小写/区分大小写)。

【讨论】:

    【解决方案3】:

    ALTER TABLE? 中使用 WITH NOCHECK 的唯一约束(不是索引)?

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2015-03-22
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多