SQL Server:重复主键错误

时间:2017-07-14 21:44:30

标签: sql sql-server duplicates primary-key

我正在使用SQL Server Express并通过导入向导导入,因此没有真正提供的代码。

此处显示错误:

  

错误0xc0202009:数据流任务1:SSIS错误代码DTS_E_OLEDBERROR。
  发生OLE DB错误。错误代码:0x80004005。
  OLE DB记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005描述:“语句已被终止。”。

     

OLE DB记录可用   来源:“Microsoft SQL Server Native Client 11.0”
  Hresult:0x80004005
  说明:“违反PRIMARY KEY约束'PK_CXS'。无法在对象'dbo.cxs'中插入重复键。重复键值为(00,00,000000,2017,01,01,00000000,0)。”

我已经通过过滤给定的值在Excel中完成了测试。只有一行出现。我连接了代表主键的八列,然后查找重复项。没有找到。接下来,在Notepad ++中使用TextFX工具,我试图删除重复项,但没有找到。

找到这个看似不存在的副本的任何其他方法?

1 个答案:

答案 0 :(得分:1)

一些建议(实际上并不是一个完整的答案,但是根据给定的数据,这是我可以做的)。

在某些情况下,您可能会在文本文件中将数据作为文本(例如1.000000001和1.000000002)不同,但在转换为文本文件后变为相同的目标类型,因为截断,舍入或其他类型的转换效果。这可能是您无法在文本文件中找到重复项的原因,但数据库会找到它们。

您可以使用并检查的技术很少:

  1. 除了导入的数据之外......目标表上是否有以前的数据?如果是这样,那么您可能会有重复的来源。

  2. 您是否有办法逐行导入(或批量导入)以便这可以帮助您找到有问题的导入?

  3. 如果以前的替代方案都不可能,您可以按照以下步骤操作:

    • 创建一个与目标结构相同的表格,但没有任何PRIMARY KEYUNIQUE约束。我们称之为load_table

    • 将您的数据导入此表格。它不应该抱怨PRIMARY KEY约束,因为没有。

    • 执行以下查询以查找重复项:

      SELECT 
          k1, k2, k3 ... kn 
      FROM 
          load_table
      GROUP BY
          k1, k2, k3 ... kn
      HAVING
          count(*) > 1
      

      其中k1k2k3 ... kn是构成目标表主键的所有列。

    使用这些技术,您将找到SQL Server找到的重复项,但可以避开您以前使用过的方法。