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),但相同 由于截断、舍入或其他类型的转换效果,一旦转换为目标类型。这可能是您在文本文件中找不到重复项,但数据库却找到它们的原因。
您可以使用和检查的技术很少:
除了导入的数据...目标table上是否有任何以前的数据已经?如果是这样,那么您可能有重复来源。
你有什么办法导入"row by row"(或批量导入),这样可以帮助你找到违规的吗?
如果前面的 none 个备选方案可行,您可以遵循以下过程:
创建一个 table 与你的 目标 具有相同的结构,但是 没有 任何 PRIMARY KEY
或 UNIQUE
约束。我们称它为 load_table
将您的数据导入此 table。它不应该抱怨 PRIMARY KEY
约束,因为没有。
执行以下查询找出重复项:
SELECT
k1, k2, k3 ... kn
FROM
load_table
GROUP BY
k1, k2, k3 ... kn
HAVING
count(*) > 1
其中 k1
、k2
、k3
... kn
是构成 目标 table。
使用这些技术,您将找到 SQL 服务器找到的重复项,但避开了您迄今为止使用的方法。
我正在使用 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),但相同 由于截断、舍入或其他类型的转换效果,一旦转换为目标类型。这可能是您在文本文件中找不到重复项,但数据库却找到它们的原因。
您可以使用和检查的技术很少:
除了导入的数据...目标table上是否有任何以前的数据已经?如果是这样,那么您可能有重复来源。
你有什么办法导入"row by row"(或批量导入),这样可以帮助你找到违规的吗?
如果前面的 none 个备选方案可行,您可以遵循以下过程:
创建一个 table 与你的 目标 具有相同的结构,但是 没有 任何
PRIMARY KEY
或UNIQUE
约束。我们称它为load_table
将您的数据导入此 table。它不应该抱怨
PRIMARY KEY
约束,因为没有。执行以下查询找出重复项:
SELECT k1, k2, k3 ... kn FROM load_table GROUP BY k1, k2, k3 ... kn HAVING count(*) > 1
其中
k1
、k2
、k3
...kn
是构成 目标 table。
使用这些技术,您将找到 SQL 服务器找到的重复项,但避开了您迄今为止使用的方法。