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 列对中是否存在任何拼写差异。
我需要更改现有的 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 列对中是否存在任何拼写差异。