如何跳过 SSIS 数据流中的最后一行

How to skip last row in the SSIS data flow

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

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

因为它包含 NULL 值,数据库会抛出错误。

请帮助我如何解决这个问题。

此致, VHK

如果您的要求是避免平面文件中的行具有空值,那么您可以采用以下方法,

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

希望对您有所帮助。

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

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

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

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

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

  1. 在脚本Window中写入如下脚本

    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. 在有条件的 Split
  2. 旁边添加 OLEDB Destination

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