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

7
我正在使用数据流中的FlatFile Source ManagerScript COmponent as TransOLEDB destination。源从平面文件中读取所有行,我想跳过最后一行(尾记录)并更新数据库。由于它包含NULL值,数据库会抛出错误。请帮助我解决这个问题。
谢谢, VHK

这可能会对您有所帮助:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e51b775a-8601-491b-8ad4-a71b0f0d59ce/missing-last-row-when-package-is-run-as-a-job-from-sql-2008-r2?forum=sqlintegrationservices - Kinchit Dalwani
2个回答

6

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

  1. In the Script Window write the following Script

    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. Add a Conditional Split Next to the Script Component

  3. Split Rows using the Following Expression

    [IsLastRow] == False
    

enter image description here

  1. 在条件分割器旁边添加OLEDB目标

enter image description here

< p > < em > 顺便提一下:如果你想忽略另一个情况的行(不是最后一行),只需更改脚本组件中编写的脚本以满足您的要求即可。


2
如果您的要求是避免在平面文件中出现空值行,则可以按照以下方法操作:
  • 使用源组件从平面文件中读取数据。
  • 使用“条件分割”组件,在“情况表达式”中提供“!ISNULL(Column1) && !ISNULL(Column2)”(Column1和Column2可以根据您的需要进行更改。如果您的平面文件有一个名为“ID”的列,并且除了最后一行外没有空值,则可以使用“!ISNULL(ID)”)。
  • 将情况输出映射到OLEDB目标。
希望这能对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接