导入到SQL Server时忽略Excel文件中的列

时间:2019-05-06 11:37:11

标签: sql-server excel ssis

我有多个具有相同格式的Excel文件。我需要将它们导入SQL Server。

我目前遇到的问题是,我需要完全忽略两个文本列,因为它们是自由文本,并且某些行的字符长度超过服务器允许我导入的长度,这会导致截断错误。

因为我不需要这些列来进行分析,所以要导入的表中不包含这些列,但由于某些原因,SSIS程序包仍会选择这些列并在中途完成导入工作。

我尝试对那些列使用最大字符长度,这仍然会导致截断错误。

我需要创建一个SSIS包,该包将完全忽略两列,而无需从Excel中删除这些列。

4 个答案:

答案 0 :(得分:1)

您可以从“编辑映射”对话框中指定需要忽略的列。

我已添加图片供您参考:

enter image description here

答案 1 :(得分:1)

如果仅在SSDT中创建SSIS包,则可以查询Excel文件以仅返回所需的列。在程序包中,使用Excel文件创建一个Excel Connection Manager。然后,在包的“控制流”上添加其中包含Excel Source组件的“数据流任务”。在此源上,将数据访问模式更改为SQL命令,然后可以类似于SQL查询该文件。在下面的示例中,TabName是包含将返回的数据的Excel选项卡的名称。如果选项卡或任何列名称包含空格,则它们将需要用方括号括起来,即TabName将为[Tab Name]enter image description here

答案 2 :(得分:1)

导入/导出向导

由于您在注释中提到您正在使用SQL Server导入/导出向导。如果您要导入的列(范围)固定(例如:前10列),则可以解决。

在导入/导出向导中,选择目标选项后,将询问您是否要从表中读取或查询:

enter image description here

选择查询选项,然后使用简单的选择查询并在工作表名称后指定列范围。例如:

SELECT * FROM [Sheet1$A:C]

由于A:C代表第一列Sheet1和第三列A之间的范围,因此上面的查询将从C的前三列中读取。

enter image description here

现在,您可以在“编辑映射” 对话框中检查列:

enter image description here


SSIS

您可以在SSIS包中使用相同的逻辑,将访问模式更改为SQL命令后,只需在Excel Source中编写相同的SQL命令即可。

答案 3 :(得分:0)

解决方案很简单。我需要编写一个查询,将排除列。因此,不是选择“从一个或多个表复制数据”,而是选择“编写查询”并排除不需要的列。这个工作100%