我正在创建一个SSIS包来将Excel文件(具有不同的布局)导入到具有150列的SQL Server表中 .
SSIS包有一个Foreach循环容器,其中有一个数据流任务,它有一个Excel源组件和一个OLE DB目标组件 .
将为每个Excel文件运行数据流任务,因此Excel源组件需要适用于每个文件 .
我已经设置了包含长度为255的150个Unicode字符串列的Excel Source组件,并且我将ValidateExternalMetadata设置为False,但是我收到错误:在测试时,无法在数据源中找到“列”F143“打包带有142列数据的Excel文件 .
我的问题是:如何让程序包忽略此错误并导入存在的列,还是有其他方法来处理上述情况?
4 回答
打开Excel Source任务的编辑器 . 在左侧窗格中,选择“错误输出” . 在列窗格下方是一行“将此值设置为选定的单元格:”,旁边有一个下拉列表 . 从下拉列表中选择“忽略失败” . 现在转到列窗格并选择“错误”列下的所有150行,然后单击下拉框旁边的“应用” . 这应该将所有Excel列设置为“忽略错误” . 点击“Ok”然后你应该好好去 .
在Excel源中,选择源类型为
SQL command
并使用以下命令(假设工作表名称为Sheet1
)ET
是index = 150的列,因此对于此查询,您强制Excel Source
读取150列,即使它们包含一些空列 .有关使用动态标头导入Excel的其他信息,请按照以下答案操作:
尝试在Excel源代码中使用以下sql命令
用第150列代替B代替 .
我希望这对于所有可能的Excel文件布局都足够了,而不是使用任意多列的SQL Server表,我重新设计了表格以包含
xlRow
,xlColumn
和xlValue
列 .然后我使用脚本组件作为我的数据流的源,使用以下C#代码:
这将循环遍历第一个工作表中的每个非空单元格,并将单元格的行,列和值输出到
Output0
,然后将其插入到SQL表中 .