SQL Server导入向导不支持从拥有超过255列的Excel表格进行导入。

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

enter image description here

enter image description here

在向导设置中,我设置了将Excel中的所有列映射到SQL Server表中。导入向导后,屏幕上没有显示任何错误,但我发现我映射的并非所有列都被填充到SQL Server表中。查看未导入的列,我发现它们位于Excel文件的列末尾(从左到右),并且在数据库中具有空值,尽管在Excel文件中具有值,并且在向导中正确地进行了映射。
Excel文件有280列需要在向导中进行映射和导入。
我尝试选择SQL Server 2016作为源,但结果相同。
作为解决方法,我将Excel文件拆分成两个单独的Excel文件,每次通过删除工作表中的一半列来减少列数。然后我必须将它们分别导入到两个中间导入步骤表中,并通过SQL查询将它们连接到主表中。
我希望有一种方法可以支持280列Excel列的一次导入。我还没有尝试过SSIS,但我认为结果会相同。
是否有任何设置或解决方法可以避免这种限制?

4
使用向导时,最多只能使用 255 列。您可以将 Excel 文件转换为 .txt 格式,然后将其作为平面文件导入。请参阅此问题的 thomassantosh 的答案:https://stackoverflow.com/questions/35068803/work-around-to-255-column-limit-in-sql-import-export-wizard-for-excel - digital.aaron
是的,这就是问题所在。Excel列的好处在于,在导入时它知道数据类型,因此向导在从CSV文件或制表符分隔文件导入时不会出现奇怪的错误。将其转换为文本文件需要额外的步骤和过程,我宁愿保持一步。 - choba78
1
最佳做法是将Excel转换为CSV,正如digital.aaron所提到的。 - Hadi
@choba78。你最终会讨厌Excel猜测数据类型的。 - KeithL
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提供程序的Flat File Connection Manager导入它

  2. 分2个阶段导入数据(使用特定范围),然后连接结果表:

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

SELECT * FROM [Sheet1$A:IT]

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接