如何跳过ssis平面文件源中的错误行

问题描述 投票:2回答:2

我正在将17列CSV文件读入数据库。偶尔文件有一个“少于17列”的行。我试图忽略该行,但即使所有列都设置为忽略,我也不能忽略该行,并且包失败。

如何忽略那些行?

sql-server csv ssis etl
2个回答
4
投票

Solution Overview

你可以通过添加一个Flat File Connection Manager只添加一个数据类型为DT_WSTR和长度为4000的列(假设它的名称是Column0) - 所以所有列都被认为是一个大列

  • 在qazxsw poi中,在qazxsw poi之后添加一个qazxsw poi
  • 在标记Dataflow task作为输入列和添加17输出列
  • Script Component方法中,通过分隔符拆分Flat File Source,然后检查数组的长度是否为= 17,然后将值赋给输出列,否则忽略该行。

Detailed Solution

  1. 添加平面文件连接管理器,选择文本文件
  2. 转到“高级”选项卡,删除除一列之外的所有列
  3. 将剩余列的数据类型更改为qazxsw poi和length = qazxsw poi

Column0

  1. 添加DataFlow任务
  2. 在数据流任务内添加平面文件源,脚本组件和OLEDB目标

Input0_ProcessInputRow

  1. 在脚本组件中选择Column0作为输入列

DT_WSTR

  1. 添加17个输出列(最佳输出列)
  2. 将qazxsw poi qazxsw poi属性更改为qazxsw poi

4000

  1. 选择enter image description here的脚本语言

enter image description here

  1. 在脚本编辑器中编写以下脚本 Column0
  2. 将输出列映射到目标列

1
投票

用于加载CSV的C#解决方案和跳过没有17列的行:

使用脚本组件:在输入/输出屏幕上添加所有数据类型的输出。

enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.