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

时间:2017-03-07 04:20:51

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

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

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

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

请帮我解决此问题。

此致 VHK

2 个答案:

答案 0 :(得分:3)

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

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

    1. 添加另一个DataFlow Task (让我们将其命名为DFT Import
    2. enter image description here

      1. DFT Import中添加Flat File Source (您需要导入的文件)
      2. Script Component
      3. 旁边添加Flat File Source
      4. User::RowCount变量添加到脚本 ReadOnly变量
      5. enter image description here

        1. 添加类型为DT_BOOL的输出列(名称:IsLastRow
        2. enter image description here

          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
            
          4. enter image description here

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

              enter image description here

              方注意:如果要忽略另一个案例(而不是最后一行)的行,只需更改脚本组件中写入的脚本以满足您的要求

答案 1 :(得分:1)

如果您的要求是避免在平面文件中具有空值的行,那么您可以按照以下方法进行操作,

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

希望这会对你有所帮助。