5

我使用 SQL Server 2019 导入和导出向导将 Excel 工作表(xlsx 文件)作为源导入,并将目标设置为 SQL Server 表。

在此处输入图像描述

在此处输入图像描述

在向导设置中,我设置了 Excel 中所有列到 SQL Server 表的映射。导入向导后,屏幕上没有显示任何错误,但我发现并非所有已映射的列都填充在 SQL Server 表中。查看未导入的列,我看到它们位于 excel 文件列的末尾(从左到右),并且在 db 中都有空值,尽管在 excel 文件中有值并且在向导中正确映射。

excel文件有280列我在向导中映射并导入

我曾尝试选择 SQL Server 2016 作为源,但结果是一样的。

作为一种解决方法,我通过一次从工作表中删除一半的列来减少列数,将 excel 文件拆分为两个单独的 excel 文件。然后我必须对两个单独的中间导入步骤表进行 2 次导入,然后通过 SQL 查询将它们加入到主表中。

我想要一种方法来做一个支持 280 列 excel 列的导入。我没有尝试过 SSIS,但我认为结果是一样的。

是否有任何设置或解决方法可以解决此限制?

4

1 回答 1

5

Excel 数据类型

首先,我不确定您提到的是否正确:

Excel 列的好处是它知道导入时的数据类型,因此从 csv 文件导入制表符分隔文件时,向导不会出现这些奇怪的错误。

由于 Excel 不是数据库引擎,并且一列可能包含不同的数据类型,这在读取数据时会导致一些问题,尤其是在使用 OLE DB 提供程序(在 SSIS 中使用)时

255 列限制

此外,255 列限制与 Microsoft Excel 无关,但与 OLE DB 提供程序(JET 或 ACE)有关,即使与其他源(Access、Flat Files ...)一起使用也是如此

解决方法

  1. 将 Excel 文件转换为 .csv 文件并使用不依赖 OLE DB 提供程序的平面文件连接管理器将其导入

  2. 分两个阶段导入具有特定范围的数据,然后加入结果表:

您可以使用以下 SQL 命令作为源将前 255 列导入表中:

SELECT * FROM [Sheet1$A:IT]

然后将剩余的列导入另一个表,然后使用 SQL 将两个表合并到一个目标表中。

您可以参考以下文章以获得一些见解:

于 2019-07-09T20:15:24.040 回答