gpt4 book ai didi

sql-server - 如何跳过ssis平面文件源中的坏行

转载 作者:行者123 更新时间:2023-12-02 09:14:55 24 4
gpt4 key购买 nike

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

如何忽略这些行?

最佳答案

解决方案概述

你可以通过添加一个 Flat File Connection Manager 来做到这一点。仅添加一列数据类型 DT_WSTR长度为 4000 (假设它的名字是 Column0 ) - 所以所有的列都被认为是一个大列

  • Dataflow task添加 Script ComponentFlat File Source
  • 在标记 Column0作为输入列并添加 17 个输出列
  • Input0_ProcessInputRow方法拆分 Column0按分隔符,然后检查数组的长度是否为 = 17,然后将值分配给输出列,否则忽略该行。

  • 详细解决方案
  • 添加平面文件连接管理器,选择文本文件
  • 转至 高级选项卡 , 删除除一列之外的所有列
  • 将剩余 Column 的数据类型更改为 DT_WSTR和长度 = 4000

  • enter image description here
  • 添加数据流任务
  • 在数据流任务中添加平面文件源、脚本组件和 OLEDB 目标

  • enter image description here
  • 在脚本组件中选择 Column0作为输入列

  • enter image description here
  • 添加 17 个输出列(最佳输出列)
  • 更改 OutputBuffer SynchronousInput属性(property)到None

  • enter image description here
  • 选择脚本语言 Visual Basic

  • enter image description here
  • 在脚本编辑器中编写以下脚本
    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
  • 将输出列映射到目标列
  • 关于sql-server - 如何跳过ssis平面文件源中的坏行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48056021/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com