【问题标题】:SQL Server is not importing all my data from a csv fileSQL Server 没有从 csv 文件导入我的所有数据
【发布时间】:2020-06-01 18:38:47
【问题描述】:

我首先说我已经安装了 SQL Server Express Advance 2014。我想将数据从 csv 文件导入 SQL Server。为此,我选择一个数据库,选择任务,选择导入数据。然后,对于数据源,我选择平面文件。对于目标,我选择 SQL Server Native Client 11.0。对于目标表,我选择由 SQL Server 导入和导出向导自动生成的表,即在导入数据之前我没有创建表,它是在我在此窗口中时创建的。数据导入结束时会显示一条消息,指出行已被传输:已传输 43 157 行(我的 csv 文件中的总行数)。

在查询中,当我编写“从该表中全选”时,在结果中,我实际上看到了一个包含 43157 行的表。但是,并非我的所有数据都已复制。我意识到这一点是因为我将 csv 文件的第一行和最后一行与结果部分中出现的表格的行进行了比较。第一行没有问题,至少前 100 行是这样。但是最后一行,即SQL表中出现的第43 157行是csv文件中的第40 475行。因此,SQL 中的该表具有与原始源相同的行数,但它不包含所有数据。

我重复了这个导入数据的过程,看看这次是否在另一个新表(也是自动生成的)中复制了所有数据。它没有发生,但在这个表中出现了 826 行,比上一张多出 826 行。我的意思是,SQL 表中的第 43157 行现在与 csv 文件中的第 41 301 行重合。我重复了这个过程,它再次出现了比上一张表多 826 行。我有一个模式!,我认为。所以我继续这样,直到所有的数据都被复制完。实际上,在第 n 次尝试中,SQL 中第 n 个表中的最后一行与 csv 文件中的最后一行重合。但到此为止,我完全把注意力集中在最后几行发生的事情上,而我没有注意到的是,现在我的第一行是错误的!例如,我最后一个 SQL 表中的第一行是我的 csv 文件中的第 2479 行。这是怎么回事?

如您所见,我是 SQL Server 的新手,所以我希望对初学者的解释不会太激进。提前致谢。

【问题讨论】:

  • 天哪!近一个星期以来,我一直试图弄清楚发生了什么。谢谢,我从来没有想过行会乱七八糟。

标签: sql-server csv import


【解决方案1】:

我认为您过于依赖以下假设:

  1. SQL Server 将完全按照 CSV 文件中的顺序插入行
  2. SQL Server 将按照插入的顺序返回行

一般来说,表格是一组无序的行,无论您如何填充这些行,您都应该始终这样想。与其尝试将源文件的“第一”行和“最后”行匹配到目标表,不如匹配这些行中的实际数据。如果 CSV 文件的最后一行包含电子邮件地址 foo@bar.com,请不要检查 foo@bar.com 是否在 SELECT * FROM dbo.table; 产生的“最后”行中,请检查 存在一行 em> 其中电子邮件地址是foo@bar.com。它不是表中的“最后”行并不意味着存在问题。

除非您可以可靠地ORDER BY 表中的某些内容恰好与输入文件中的数据顺序相匹配。但即便如此,您也应该匹配数据,而不是序数位置。

【讨论】:

  • SSMS 中存在错误。我打开了 csv - 它有 23132 行(1 个标题行)。导入后选择计数(1)说 17304。所以必须有一个点 SSMS 超时或什么的。它还说它在导入向导报告中“停止”。 -但没有给出任何理由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2017-12-14
相关资源
最近更新 更多