重复主键 SQL

3

这似乎是SQL Server:重复主键错误的副本。

首先,我使用的是SQL Express。其次,我正在使用导入和导出向导。第三,源文件是一个文本文件。第四,我已经成功导入了这个文件的另外两个迭代,FIRMS.2017q2和2013q2可以顺利导入,但2013q1不行。原因是重复的主键错误。

我的主键是stateaccountunityrqtr。还有25个其他外键。以下是示例数据。

错误消息会生成一个被认为是冒犯的值。我在excel和notepad++中找到了这个值。然而,当我深入挖掘时,我发现这四个值的组合只出现了一次。

作为进一步的测试,在excel中,我将四个主键值连接成一个字段,然后在连接(组合)值中搜索重复项。Excel会返回结果,但当你查看它们时,它们并不相同。单元号在每个被认为是重复的项目中都不同。我注意到当name1(不是主键)有多于1个值时,excel(和我推测的SQL)会认为它是重复的。我只是使用excel作为查找重复项的工具。

state   area    account    unit     yrqtr     name1     name2
  32   000001    12345    00001     201301    bakery    xyz bakery
  32   000003    12346    00001     201301    auto      xyz auto

关于SQL,我将201301作为一种加载表格导入,而不是将其附加到FIRMS上。从那里,我使用了以下代码。但是没有任何结果。最后,我查看了201702和201302,没有发现重复项

select state,account,unit,yrqtr
from dbo.201301
Group by state,account,unit,yrqtr
having count(*) >1

那么,你有什么想法来解决这个看似不存在重复项的问题吗?


1
你正在导入数据的表的CREATE TABLE定义是什么? - Dai
在Excel中,我将四个主键值连接成一个字段。这些值本身不是主键值,因为它们单独来看并不唯一。你是说它们是复合键吗?即使是这样,你发布的数据看起来也不是很唯一。 - Dai
最后,当你导入数据时,你确定表格是空的吗?如果你单独查看输入文件,那么你可能看不到任何重复项,但是与表中已有的数据相比较呢? - Dai
@Dai,是的,它是一个复合键,但当这四个值被放入一个字符串中时,没有重复。问题在于导入向导告诉我由于错误没有传输数据。然而,实际上已经传输了。每次我再试一次,它都会传输微小的痕迹。 - Calflamesfann
1个回答

1

拿一个空的目标表的副本,禁用主键和外键,将所有文件导入该表,并运行查询以检查重复数据。这可能会揭示在导入过程中是否修改了数据。

SELECT state, account, unit, yrqtr, COUNT(*) AS dups 
FROM TableCopy 
GROUP BY state, account, unit, yrqtr 
HAVING COUNT(*) > 1

我按照上述步骤进行了操作,发现问题在于虽然错误提示没有从201301传输数据到FIRMS,但实际上它导入了微量的数据(74103条记录中的18条)。感谢您的帮助。 - Calflamesfann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接