SSIS脚本组件填充变量:记录类型值提取与应用求助
SSIS脚本组件完善指导
问题背景
我是SSIS脚本组件的新手,目前思路方向正确。我有一个包含多条记录的平面文件,每条记录带有类型1、4、5等标识,需实现以下逻辑:
- 类型1记录:提取第5列的值存入变量
- 类型4记录:提取第3、5、6列的值存入对应变量
- 类型5记录:将上述变量值添加到该类记录的末尾列中
现有代码
Public Class ScriptMain Inherits UserComponent Private Company_Code As String Public Overrides Sub PostExecute() MyBase.PostExecute() Me.Variables.Filter_Company_Code = Company_Code End Sub Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) If (Row.RecordType = "1") Then Company_Code = ElseIf (Row.RecordType = "4") Then End If End Sub End Class
完善步骤
1. 补充类型1记录的赋值逻辑
在Row.RecordType = "1"的分支中,将第5列的值赋值给Company_Code变量。注意替换代码中的Column5为实际列名(需提前在脚本组件的输入列中勾选该列):
If (Row.RecordType = "1") Then ' 处理空值避免报错 If Not Row.Column5_IsNull Then Company_Code = Row.Column5 End If
2. 新增类型4记录的变量与赋值
首先在类中定义存储类型4列值的私有变量,然后在对应分支中完成赋值:
' 在类顶部新增变量定义 Private Company_Code As String Private Type4_Col3 As String Private Type4_Col5 As String Private Type4_Col6 As String ' 在Input0_ProcessInputRow方法的类型4分支中赋值 ElseIf (Row.RecordType = "4") Then If Not Row.Column3_IsNull Then Type4_Col3 = Row.Column3 If Not Row.Column5_IsNull Then Type4_Col5 = Row.Column5 If Not Row.Column6_IsNull Then Type4_Col6 = Row.Column6
3. 处理类型5记录的字段追加
首先在脚本组件的输出列中添加需要追加的字段(如Out_CompanyCode、Out_Type4_Col3等),然后新增类型5的处理分支:
ElseIf (Row.RecordType = "5") Then ' 将保存的变量值赋值给输出列 Row.Out_CompanyCode = Company_Code Row.Out_Type4_Col3 = Type4_Col3 Row.Out_Type4_Col5 = Type4_Col5 Row.Out_Type4_Col6 = Type4_Col6
4. 扩展包级变量的赋值(可选)
如果需要将类型4的变量值也存入包级变量,在PostExecute方法中补充赋值:
Public Overrides Sub PostExecute() MyBase.PostExecute() Me.Variables.Filter_Company_Code = Company_Code Me.Variables.Filter_Type4_Col3 = Type4_Col3 Me.Variables.Filter_Type4_Col5 = Type4_Col5 Me.Variables.Filter_Type4_Col6 = Type4_Col6 End Sub
5. 关键注意事项
- 确保脚本组件已在输入列选项卡中勾选所有需要访问的列(RecordType、第3/5/6列等)
- 若存在多条类型1或4的记录,当前逻辑会用最新一条记录的值覆盖变量,若需保留多条记录需调整为集合存储
- 始终添加空值判断,避免因源数据为空导致运行时错误
内容的提问来源于stack exchange,提问作者Geoff Codd
相关产品推荐
相关产品推荐

