how to skip a bad row in ssis flat file source(如何跳过ssis平面文件源中的坏行)
问题描述
我正在将一个 17 列的 CSV 文件读入数据库.偶尔,该文件有一个少于 17 列"的行.我试图忽略该行,但即使所有列都设置为忽略,我也无法忽略该行并且程序包失败.
I am reading in a 17-column CSV file into a database. once in a while the file has a "less then 17-column" row. I am trying to ignore the row, but even when all columns are set to ignore, I can't ignore that row and the package fails.
如何忽略这些行?
推荐答案
解决方案概览
您可以通过添加一个平面文件连接管理器
来实现这一点,只添加一个数据类型为DT_WSTR
且长度为4000
的列(假设它的名字是 Column0
) - 所以所有的列都被认为是一个大列
Solution Overview
you can do this by adding one Flat File Connection Manager
add only one column with Data type DT_WSTR
and a length of 4000
(assuming it's name is Column0
) - So all column are considered as one big column
- 在
Dataflow task
中,在Flat File Source
之后添加一个 - 将
Column0
标记为输入列并添加17个输出列 - 在
Input0_ProcessInputRow
方法中,通过分隔符分割Column0
,然后检查数组的长度是否为= 17,然后为输出列赋值,否则忽略该行.莉>
Script Component
- In the
Dataflow task
add aScript Component
after theFlat File Source
- In mark
Column0
as Input Column and Add 17 Output Columns - In the
Input0_ProcessInputRow
method splitColumn0
by delimiter, Then check if the length of array is = 17 then assign values to output columns, Else ignore the row.
- 添加一个平面文件连接管理器,选择文本文件
- 转到高级选项卡,删除除一列之外的所有列
- 将剩余的列的数据类型更改为
DT_WSTR
并且长度 =4000
- Add a Flat file connection manager, Select the text file
- Go to the Advanced Tab, Delete all Columns except one Column
- Change the datatype of the remianing Column to
DT_WSTR
and length =4000
- 添加数据流任务
- 在数据流任务中添加平面文件源、脚本组件和 OLEDB 目标
- 在脚本组件中选择
Column0
作为输入列
- 添加 17 个输出列(最佳输出列)
- 将
OutputBuffer
SynchronousInput
属性更改为None
- Add 17 Output Columns (the optimal output columns)
- Change the
OutputBuffer
SynchronousInput
property toNone
- 选择
Visual Basic
的脚本语言
在脚本编辑器中编写以下脚本
In the Script Editor write the following Script
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.Column0_IsNull AndAlso
Not String.IsNullOrEmpty(Row.Column0.Trim) Then
Dim strColumns As String() = Row.Column0.Split(CChar(";"))
If strColumns.Length <> 17 Then Exit Sub
Output0Buffer.AddRow()
Output0Buffer.Column = strColumns(0)
Output0Buffer.Column1 = strColumns(1)
Output0Buffer.Column2 = strColumns(2)
Output0Buffer.Column3 = strColumns(3)
Output0Buffer.Column4 = strColumns(4)
Output0Buffer.Column5 = strColumns(5)
Output0Buffer.Column6 = strColumns(6)
Output0Buffer.Column7 = strColumns(7)
Output0Buffer.Column8 = strColumns(8)
Output0Buffer.Column9 = strColumns(9)
Output0Buffer.Column10 = strColumns(10)
Output0Buffer.Column11 = strColumns(11)
Output0Buffer.Column12 = strColumns(12)
Output0Buffer.Column13 = strColumns(13)
Output0Buffer.Column14 = strColumns(14)
Output0Buffer.Column15 = strColumns(15)
Output0Buffer.Column16 = strColumns(16)
End If
End Sub
将输出列映射到目标列
Map the Output Columns to the Destination Columns
这篇关于如何跳过ssis平面文件源中的坏行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何跳过ssis平面文件源中的坏行
基础教程推荐
- Sql Server 字符串到日期的转换 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01