SQL服务器:重复主键错误

问题描述:

我使用SQL Server Express,并通过导入向导导入所以没有代码提供真正的。SQL服务器:重复主键错误

此处显示的错误:

错误为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的本机客户端11.0”
HRESULT:0x80004005的
说明:“PRIMARY KEY约束 'PK_CXS' 违反不能在对象中插入重复键 'dbo.cxs' 重复的键值是(00。 ,00,000000,2017,03,01,00000000,0)。“。

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

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

+1

数据库中已存在的记录如何?当您尝试导入表中存在的主键时,您将看到该错误。 – Eric

+0

在每次导入错误之前,我使用dbo.XXX中的删除操作删除所有记录。这是足够的还是我需要进一步? –

+0

嗨,蒂姆,它看起来像PK_CXS是一个复合主键与多个东西那里,你检查他们所有的一起吗?同时检查密钥是否已经自动生成。附:在这里,一个巨大的复合主体对我来说看起来不太合适,也许将主关键字切换到标识列使生活更轻松? – Chengzhi

一些建议(这是不是真的一个完整的答案,但与给定的数据,是因为据我可以去)。

在某些情况下,你可能有数据为文本(如1.000000001和1.000000002),在您的文本文件不同,但成为相同一旦转化成他们的目标类型,因为截断的,四舍五入,或其他类型的转换效果。这可能是您无法在文本文件中找到重复内容的原因,但数据库可以找到它们。

有可以使用,并检查一些技巧:

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

  2. 你有没有办法导入“逐行”(或批量导入),这样可以帮助你找到违规的?

如果没有以前的方案是可行的,可以按照此过程:

  • 创建具有相同结构的表作为目标之一,但没有任何PRIMARY KEYUNIQUE限制。我们称之为load_table

  • 将您的数据导入此表。它不应该投诉PRIMARY KEY因为没有任何限制。

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

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

    其中​​,k2k3 ... kn都将包含您的目标表的主键列。

使用这些技术,您会发现SQL Server找到的重复项,但是避开了迄今为止使用的方法。

+0

我将尝试导入1到393,190行,看看是否有效。进口停止在394,910的393,192 –

+0

我用你的建议。原始数据源有27列,而且在所有27列中重复实际上是不可能的。因此,请在8列(主键)处将其关闭,然后创建没有主键的加载表。这是成功的。非常感谢。 –

+0

很高兴有帮助。 – joanolo