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

问题描述 投票:13回答:10

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

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

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

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

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

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

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

戴夫

sql-server excel import
10个回答
34
投票

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

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

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

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


0
投票

似乎来自SSMS的导入工具采用第一个'x'行的样本来决定列的数据类型和它的其他特征,因此如果它选择为double,则将文本值视为null,如果它读取它作为文本没有数字会显示。如果你有Microsoft Access,你可以先使用访问导入,它允许你选择自己的列类型并将其保存为访问文件,然后导入访问SQL服务器和'voila',它的工作原理(至少对我而言),我希望它对某人有帮助。


2
投票

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


1
投票

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


0
投票

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


0
投票

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


0
投票

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


0
投票

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

看起来Microsoft Excel和Microsoft SQL Server之间的集成会更清晰。

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


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.