我正在将管道分隔的平面文件加载到临时表中。在加载过程中,SSIS脚本组件在一行上执行一些操作。它可以根据另一个字段中的值在一个字段中设置标志,为某些列添加前缀或应用格式。例如,如果缺少日期,则该字段被分配为默认日期。 (如果Row.EndDate_isNull,则Row.EndDate = defaultDate)如何在SSIS脚本组件中按名称循环访问列?
当需要将相同的转换应用于一系列行时,这些脚本变得很麻烦。例如,医疗记录文件可以用三个字段来描述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
How can I get the column Value in Script Component in SSIS?
我看到,这让我有一部分的方式 - 它将使我遍历我的领域,因为他们是在列表中。有没有办法避免迭代源代码中的所有列? – DataWriter
我是否担心循环遍历所有列的开销不合理? – DataWriter
你说得对。我认为你可以使用linq过滤列名。几点,我会更新 – Hadi