SQL Server导入向导不支持从超过255列的Excel工作表导入

时间:2019-07-08 15:01:09

标签: sql-server excel ssis etl sql-server-2019

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

enter image description here

enter image description here

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

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

我尝试选择SQL Server 2016作为源,但是结果是相同的。

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

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

是否有任何设置或解决方法来克服此限制?

1 个答案:

答案 0 :(得分:1)

Excel数据类型

首先,当您提到以下内容时,我不确定您是否正确:

  

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

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

255列限制

此外,255列的限制与Microsoft Excel不相关,但与OLE DB提供程序(JET或ACE)有关,即使与其他来源(Access,平面文件...)一起使用时,也是如此

解决方法

  1. 将Excel文件转换为.csv文件,然后使用不依赖OLE DB提供程序的Flat File Connection Manager导入

  2. 分两个阶段导入数据,并指定范围,然后加入结果表:

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

SELECT * FROM [Sheet1$A:IT]

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

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