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

VHK*_*VHK 6 sql-server ssis etl dataflow ssis-2012

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

Source从平面文件中读取所有行,我想跳过更新数据库的最后一行(Trailer record).

由于它包含NULL值,因此数据库会引发错误.

请帮我解决这个问题.

问候,VHK

Had*_*adi 5

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

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

在此处输入图片说明

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

在此处输入图片说明

  1. DFT Import添加Flat File Source (文件,你需要进口)
  2. Script Component旁边添加一个Flat File Source
  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
    
    Run Code Online (Sandbox Code Playgroud)
  2. Conditional Split在脚本组件中添加Next

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

    [IsLastRow] == False
    
    Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  1. OLEDB Destinationnext添加到条件拆分

在此处输入图片说明

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


Vik*_*888 2

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

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

希望这会对您有很大帮助。