我正在使用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工具,我试图删除重复项,但没有找到。
找到这个看似不存在的副本的任何其他方法?
答案 0 :(得分:1)
一些建议(实际上并不是一个完整的答案,但是根据给定的数据,这是我可以做的)。
在某些情况下,您可能会在文本文件中将数据作为文本(例如1.000000001和1.000000002)不同,但在转换为文本文件后变为相同的目标类型,因为截断,舍入或其他类型的转换效果。这可能是您无法在文本文件中找到重复项的原因,但数据库会找到它们。
您可以使用并检查的技术很少:
除了导入的数据之外......目标表上是否有已以前的数据?如果是这样,那么您可能会有重复的来源。
您是否有办法逐行导入(或批量导入)以便这可以帮助您找到有问题的导入?
如果以前的替代方案都不可能,您可以按照以下步骤操作:
创建一个与目标结构相同的表格,但没有任何PRIMARY KEY
或UNIQUE
约束。我们称之为load_table
将您的数据导入此表格。它不应该抱怨PRIMARY KEY
约束,因为没有。
执行以下查询以查找重复项:
SELECT
k1, k2, k3 ... kn
FROM
load_table
GROUP BY
k1, k2, k3 ... kn
HAVING
count(*) > 1
其中k1
,k2
,k3
... kn
是构成目标表主键的所有列。
使用这些技术,您将找到SQL Server找到的重复项,但可以避开您以前使用过的方法。