【发布时间】:2017-10-19 18:41:08
【问题描述】:
我正在将一个以管道分隔的平面文件加载到临时表中。在加载过程中,SSIS 脚本组件对一行执行一些操作。它可以根据另一个字段中的值在一个字段中设置标志,为某些列添加前缀,或应用格式。例如,如果缺少日期,则会将该字段分配给默认日期。 (如果 Row.EndDate_isNull 则 Row.EndDate = defaultDate)
当需要对一系列行应用相同的转换时,这些脚本会变得很麻烦。例如,一个病历文件可以用三个字段描述 9 个诊断中的每一个:Diagnosis01_Date、Diagnosis01_Code、Diagnosis01_System....Diagnosis09_Date、Diagnosis09_Code、Diagnosis09_System。
我想使用循环对 9 组 3 个字段中的每一个执行操作,而不是编写相同的操作 9 次。
例如,如果我在 VB 中处理一个集合,我会在 Input0_ProcessInputRow 子项中编写类似这样的内容:
For i = 1 to 9
row.("Diagnosis0"+ i + "_Date").Value = diagnosisDate
row.("Diagnosis0"+ i + "_System").value = "ICD10"
next i
然而,在 SSIS 对象模型中,列作为 Input0Buffer 的属性公开,我找不到使用变量来引用它们的方法。那么,我如何可以在 SSIS 脚本组件中创建一个按名称对列进行操作的循环?
编辑:我发现以下来源,尤其是前两个,在我研究这个问题时很有帮助。似乎应该有一个使用 system.reflection 的解决方案,但我只是不太了解 .NET,无法弄清楚。
http://agilebi.com/jwelch/2007/10/21/address-columns-generically-in-a-script-task/
http://agilebi.com/jwelch/2007/06/02/xml-destination-script-component/
http://microsoft-ssis.blogspot.com/2010/12/do-something-for-all-columns-in-your.html
http://toddmcdermid.blogspot.com/2011/05/iterating-over-columns-in-ssis-script.html
http://bidn.com/blogs/MikeDavis/ssis/1800/ssis-for-each-column-in-a-data-flow
【问题讨论】:
标签: sql-server ssis etl ssis-2012 system.reflection