SSIS Input0Buffer 错误中的脚本任务

Script Task in SSIS Input0Buffer Error

我需要更改现有的 SSIS 包以添加新列。这个包有一个比较旧值和新值的脚本任务。它给了我以下错误。

在 ScriptComponent_2dc377607ff1474a82d85cf977045c1c.vbproj.ScriptMain.Input0_ProcessInputRow(Input0Buffer 行) 在 ScriptComponent_2dc377607ff1474a82d85cf977045c1c.vbproj.UserComponent.Input0_ProcessInput(Input0Buffer 缓冲区) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer 缓冲区)

这里是 VB 代码:

   #Region "Private Constants"
        Private Const oldValueTag As String = "OLD"
        Private Const newValueTag As String = "NEW"
        Private Const nullValueTag As String = "_IsNull"
    #End Region

        Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
            Dim column As IDTSInputColumn100
            Dim newColumnName As String
            Dim rowType As Type = Row.GetType()
            Dim newColumnValue As String
            Dim oldColumnValue As String
            Dim newColumnValueNumber As Double
            Dim oldColumnValueNumber As Double


            Row.RecordChanged = False

                'Loop through list of Input Columns per Row
                For Each column In Me.ComponentMetaData.InputCollection(0).InputColumnCollection

                    'Reset Values to defaults
                    newColumnValue = ""
                    oldColumnValue = ""
                    newColumnValueNumber = 0
                    oldColumnValueNumber = 0

                    If column.Name.EndsWith(oldValueTag) Then

                        'Set NEW column name based on OLD
                        newColumnName = column.Name.Substring(0, column.Name.IndexOf(oldValueTag)) + newValueTag

                        'Check if our OLD value is Null - grab value
                        If CBool(rowType.GetProperty(column.Name & nullValueTag).GetValue(Row, Nothing)) = False Then
                            oldColumnValue = Trim(rowType.GetProperty(column.Name).GetValue(Row, Nothing).ToString)
                        End If

                        If CBool(rowType.GetProperty(newColumnName & nullValueTag).GetValue(Row, Nothing)) = False Then
                        newColumnValue = Trim(rowType.GetProperty(newColumnName).GetValue(Row, Nothing).ToString)


         End If

                  If Double.TryParse(oldColumnValue, oldColumnValueNumber) And Double.TryParse(newColumnValue, newColumnValueNumber) Then

                       If Not oldColumnValueNumber = newColumnValueNumber Then
                            Row.RecordChanged = True
                            Return
                        End If

                    Else

                        If Not oldColumnValue = newColumnValue Then
                            Row.RecordChanged = True
                            Return
                        End If

                    End If

                End If

            Next


    End Sub

您的代码中的假设是输入行包含每个旧列的新列。我的猜测是您添加了一个没有相应新列的旧列。

你需要传递给组件类似

列 1OLD
Column2OLD
Column3OLD
Column1NEW
Column2NEW
Column3NEW

我建议:

1. 检查您传递的 OLD 和 NEW 列的数量是否相等。
2. 检查 OLD 和 NEW 列对中是否存在任何拼写差异。