SQL 服务器:重复主键错误

SQL Server : Duplicate Primary Key error

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

此处显示错误:

Error 0xc0202009: Data Flow Task 1: SSIS Error Code DTS_E_OLEDBERROR.
An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The statement has been terminated.".

An OLE DB record is available.
Source: "Microsoft SQL Server Native Client 11.0"
Hresult: 0x80004005
Description: "Violation of PRIMARY KEY constraint 'PK_CXS'. Cannot insert duplicate key in object 'dbo.cxs'. The duplicate key value is (00, 00, 000000, 2017, 03, 01, 00000000, 0).".

从那以后,我通过按给定的值进行过滤,在 Excel 中完成了测试。只有一排出现。我连接了代表主键的八列,然后查找重复项。 None 被发现。接下来,使用 Notepad++ 中的 TextFX 工具,我尝试删除重复项,发现 none。

还有其他方法可以找到这个看似 none 存在的重复项吗?

一些建议(这不是真正的完整答案,但根据给定的数据,我已经尽力了)。

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

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

  1. 除了导入的数据...目标table上是否有任何以前的数据已经?如果是这样,那么您可能有重复来源。

  2. 你有什么办法导入"row by row"(或批量导入),这样可以帮助你找到违规的吗?

如果前面的 none 个备选方案可行,您可以遵循以下过程:

  • 创建一个 table 与你的 目标 具有相同的结构,但是 没有 任何 PRIMARY KEYUNIQUE 约束。我们称它为 load_table

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

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

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

    其中 k1k2k3 ... kn 是构成 目标 table。

使用这些技术,您将找到 SQL 服务器找到的重复项,但避开了您迄今为止使用的方法。