【问题标题】:How to skip last row in the SSIS data flow如何跳过 SSIS 数据流中的最后一行
【发布时间】:2017-07-27 04:20:19
【问题描述】:

我在我的数据流中使用FlatFile Source Manager --> Script COmponent as Trans --> OLEDB destination

源从平面文件中读取所有行,我想跳过更新数据库的最后一行(预告片记录)。

由于它包含NULL 值,数据库会抛出错误。

请帮我解决这个问题。

问候, VHK

【问题讨论】:

标签: sql-server ssis etl ssis-2012 dataflow


【解决方案1】:

要忽略最后一行,您必须执行以下步骤:

  1. 添加DataFlow Task (我们将其命名为DFT RowCount
  2. 添加类型为System.Int32 的全局变量(名称:User::RowCount)
  3. 在此 DataFlow 任务中添加 Flat File Source (您要导入的文件)
  4. Flat File Source 旁边添加一个RowCount 组件
  5. RowCount 结果映射到变量User::RowCount

  1. 添加另一个DataFlow Task (我们将其命名为DFT Import

  1. DFT Import 添加Flat File Source (您需要导入的文件)
  2. Flat File Source 旁边添加Script Component
  3. User::RowCount 变量添加到脚本只读变量

  1. 添加DT_BOOL 类型的输出列(名称:IsLastRow

  1. 在脚本窗口中编写以下脚本

    Dim intRowCount As Integer = 0
    Dim intCurrentRow As Integer = 0
    Public Overrides Sub PreExecute()
        MyBase.PreExecute()
        intRowCount = Variables.RowCount
    End Sub
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        intCurrentRow += 1
    
        If intCurrentRow = intRowCount Then
            Row.IsLastRow = True
        Else
            Row.IsLastRow = False
        End If
    
    End Sub
    
  2. 在脚本组件旁边添加Conditional Split

  3. 使用以下表达式拆分行

    [IsLastRow] == False
    

  1. 在条件拆分旁边添加OLEDB Destination

旁注:如果您想忽略另一种情况的行(不是最后一行),只需更改脚本组件中编写的脚本以满足您的要求

【讨论】:

    【解决方案2】:

    如果您的要求是避免平面文件中包含空值的行,那么您可以按照以下方法,

    • 使用源组件从平面文件中读取数据。
    • 使用Conditional Split组件,并在case expression中提供!ISNULL(Column1) && !ISNULL(Column2)(Column1和Column2可以随心所欲。如果您的平面文件有一个名为的列,比如说ID并且它没有空值除了最后一行,则可以使用!ISNULL(ID))。
    • 将案例输出映射到 OLEDB 目标。

    希望对你有很大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多