从Excel导入数据到SQL Server无法导入所有数据

时间:2013-04-08 17:06:43

标签: sql-server excel import

使用导入和导出数据工具将数据从Excel导入SQL Server时发生了奇怪的事情。

缺点是我可以在Excel中看到数据,但不会导入所有数据。

我有一个包含一个电子表格的Excel工作簿。我可以看到列中的数据,一切看起来都不错。当我使用导入向导导入数据时,我可以看到列和预览数据,但是执行导入时数据并不会全部转移。没有错误,导入过程结束 - 它只是在表中插入一堆空值。

似乎最常发生的是数字 - 所以我要说我的名字,姓氏和身份证号码都有三列。我将获得所有的名字和姓氏,以及一些身份证号码。我无法找到正在发生的事情的模式。

之前我曾经发生这种情况,我注意到在导入过程中有两个电子表格可供选择:DataImport和DataImport $ - 第一个将如上所述失败,第二个将完美导入。这次只能选择一个电子表格。

我主要在64位系统上使用XLS文档和32位导入向导,但我愿意尝试任何事情。

为什么有两个电子表格(有时)以及为什么导入会失败的任何想法?

戴夫

11 个答案:

答案 0 :(得分:34)

您的问题的答案可能涉及如何将数据存储在Excel中。

我遇到了同样的问题。我有一个包含两种类型值的列:数字和带有破折号的数字。 (例如51000和2009-00949)我需要将它们作为NVARCHAR或VARCHAR导入,但是SQL导入向导(SQL2005)只会导入数字,而不是带有破折号的数字,或带有破折号的数字,而不是数字,取决于第一条记录中的类型。未导入的值在字段中将具有“null”值,从而使我的记录无效。

我尝试使用Excel中的格式|单元格菜单选项(数字,文本,常规等)和SQL中的各种映射选项(nvar,nvarchar,varchar,sqlvariant,float),但没有成功。

解决方案是使用Excel中的“数据|文本到列”选项,而不是单元格格式选项将数值存储为文本。当我在列上使用它时,数值(例如51000)转换为存储为文本值的数字(左上角出现小的绿色三角形错误),带有短划线的数字仍然是文本。我不得不以这种格式保留数据,带有绿色小三角形错误,否则无法成功导入SQL。当列中的数据以此格式存储时,两种类型的列数据(带有破折号的数字和数字)与其他记录数据正确导入,列中没有空值。

答案 1 :(得分:2)

我的问题是我导入的文件是一个较旧且有点恶意的excel文件。我打开文件并将其保存为.xlsx,然后成功导入文件,之后没有空数据。

答案 2 :(得分:1)

我能够通过对数据进行排序来解决问题,以便文本数据位于顶部。这样SQL Server就知道它是文本数据,而不是数字数据。

答案 3 :(得分:0)

您正在使用导入向导,不是吗?单击向导的“选择源表和视图”页面上的Edit Mappings,然后检查每个源列的Type,Nullable和Size列。听起来好像没有正确映射的东西。

答案 4 :(得分:0)

最有可能是空白行导致Sql Server忽略其余数据。你可以肯定,你可以分享excel文件和前五行的架构吗?正确的三个和接下来的两个记录。

答案 5 :(得分:0)

选择该列的所有行并在excel中将类型更改为Text然后选择整列并将类型更改为Text肯定有效。

答案 6 :(得分:0)

我也遇到了这个问题。我能够解决它的唯一方法是将.xlsx文件保存为.csv文件,然后将.csv文件用于SQL Server"导入数据"。

似乎Microsoft Excel和Microsoft SQL Server之间的集成将更加清晰。

我的版本是: Excel 2013。 SQL Server 2012。

答案 7 :(得分:0)

我遇到了完全相同的问题使用 .xlsx 文件解决了我的问题。

答案 8 :(得分:0)

最后格式化单元格一般为我工作的地方有数值,早些时候它显示%s但现在它已经解决了。

答案 9 :(得分:0)

似乎来自SSMS的导入工具从前“ x”行的样本中确定该列的数据类型及其其他特征,因此,如果选择为double,则它将文本值设为null,然后如果将其读取为文本,则不会显示数字。 如果您具有 Microsoft Access ,则可以先使用访问导入,该访问导入允许您选择自己的列类型并将其保存为访问文件,然后将访问导入SQL Server和“瞧”,它将起作用(至少对我来说),我希望它能对某人有所帮助。

答案 10 :(得分:0)

我正在将数据上传到现有表。我所做的是在现有表中编写脚本,以验证我要导入的列是否与现有列匹配。原来我的一列不匹配,只是部分导入了数据集。