16

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

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

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

这似乎最常发生在数字上——所以假设我有三列分别表示名字、姓氏和 ID 号。我会得到所有的名字和姓氏,以及一些身份证号码。我找不到正在发生的事情的模式。

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

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

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

戴夫

4

11 回答 11

40

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

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

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

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

于 2013-12-27T13:11:11.177 回答
2

我的问题是我正在导入的文件是一个较旧且有些诽谤的 excel 文件。我打开文件并将其另存为 .xlsx 并成功导入文件,之后没有空数据。

于 2014-06-18T21:16:29.557 回答
1

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

于 2016-08-29T15:36:37.917 回答
1

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

于 2016-09-12T14:16:27.623 回答
0

最有可能是那个所谓的空白行导致 Sql Server 忽略其余数据。Bu确定你能分享excel文件的模式和前五行吗?正确的三个和接下来的两个记录。

于 2013-04-09T05:02:55.580 回答
0

您正在使用导入向导,不是吗?单击Edit Mappings向导的“Select Source Tables and Views”页面,然后检查每个源列的 Type、Nullable 和 Size 列。听起来有些东西没有正确映射。

于 2013-04-08T18:52:53.780 回答
0

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

Microsoft Excel 和 Microsoft SQL Server 之间的集成似乎会更干净。

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

于 2016-05-17T17:17:15.597 回答
0

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

于 2017-05-13T06:38:32.273 回答
0

似乎来自 SSMS 的导入工具会抽取前“x”行的样本来确定列的数据类型和它的其他特征,所以如果它选择是双精度的,它会将文本值设为 null,如果它读取它作为文本没有数字将显示。如果您有Microsoft Access,您可以首先使用访问导入,它允许您选择自己的列类型并将其保存为访问文件,然后导入对 SQL 服务器的访问并“瞧”,它可以工作(至少对我来说),我希望它可以帮助某人。

于 2019-02-04T14:47:19.740 回答
0

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

于 2019-11-13T01:35:22.110 回答
0

选择该列的所有行并将类型更改为 Excel 中的文本,然后选择整个列并将类型更改为文本肯定会起作用。

于 2016-05-10T08:12:26.400 回答