我使用SQL Server 2019导入和导出向导将Excel工作表(xlsx文件)作为源导入,并将目标设置为SQL Server表。
在向导设置中,我设置了Excel中所有列到SQL Server表的映射。 导入向导之后,我没有在屏幕上显示任何错误,但是我发现并不是所有映射的列都填充在SQL Server表中。 查看未导入的列,我发现它们位于excel文件列的末尾(从左到右),尽管excel文件中有值并且已在向导中正确映射,但所有这些值在db中都为空值。>
我在向导中映射并导入的excel文件有280列
我尝试选择SQL Server 2016作为源,但是结果是相同的。
作为一种解决方法,我通过一次删除工作表中的一半列以减少列数,将excel文件分为两个单独的excel文件。然后,我必须将2次导入到两个单独的中间导入步骤表中,然后通过SQL查询将它们联接到主表中。
我想要一种支持280列excel列的导入方法。我没有尝试过SSIS,但我认为结果将是相同的。
是否有任何设置或解决方法来克服此限制?
答案 0 :(得分:1)
首先,当您提到以下内容时,我不确定您是否正确:
Excel列的优点在于,它知道导入时的数据类型,因此从制表符分隔文件的csv文件导入时,向导不会出现这些奇怪的错误。
由于Excel不是数据库引擎,并且一列可能包含不同的数据类型,因此在读取数据时尤其是在使用OLE DB提供程序(在SSIS中使用)时,会引起一些问题
此外,255列的限制与Microsoft Excel不相关,但与OLE DB提供程序(JET或ACE)有关,即使与其他来源(Access,平面文件...)一起使用时,也是如此
将Excel文件转换为.csv文件,然后使用不依赖OLE DB提供程序的Flat File Connection Manager导入
分两个阶段导入数据,并指定范围,然后加入结果表:
您可以使用以下SQL命令作为源将前255列导入表中:
SELECT * FROM [Sheet1$A:IT]
然后将剩余的列导入到另一个表中,然后使用SQL将两个表合并到一个目标表中。
您可以参考以下文章以获得一些见解: