如何在SSIS C#脚本中使用字符串内容作为变量名

时间:2016-11-05 22:50:04

标签: c# ssis ssis-2008

大家好,感谢您的时间和答案。 我先给大家介绍一下背景: 我在一个指标项目的银行工作。我们正在重新设计商业部门的所有ETL流程和微策略仪表板,他们使用大量非IT数据源,我们必须将该信息映射到 SQL Server 2008R2 服务器中的IT集中源。对于ETL,我们使用 SSIS

我有贷款的ETL。在数据流程中,我收集了所有关于贷款的信息,然后从一个特定的表中我得到了所有需要测试的条件来对贷款进行分类。条件表具有以下形式:

sk_condition_name: varchar
sk_whatever: ...
...
where_clause: varchar(900)

“where_clause”列中,我有一个where子句(duh!)来测试贷款中的一些列,如下所示:

loan_type = x AND client_tipe = y AND loan_rate = z

在我深入研究之前,我需要说的是我给出的例子是贷款,但银行出售的所有产品都是如此,例如保险或投资基金...... 和< / strong>对产品进行分类的条件可以及时更改 一个特定的贷款可以同时以多种方式分类,每个肯定的分类在特定的表中写一行,这就是我需要一个异步脚本的原因成分

我在哪里?是的,贷款..所以在ETL中获取所有贷款数据和那些where_clauses,在C#脚本组件中我们将子句与正则表达式分开,因此我们最终为该子句正在执行的每个检查使用2个字符串,使用上面的例子我最终得到3对字符串(“loan_type”,“x”),(“client_type”,“y”)和(“loan_rate”,z)。

这就是问题出现的地方

我在脚本中找不到使用第一个字符串内容作为行列名称的方法,这就是我的意思:

if Row.(string1.content()) = string2 then ...

现在有限制:

  • 这是一家银行,他们不喜欢新事物,所以我可以使用的工具是SSIS的工具。
  • 模型中的更改可能不在讨论范围内,不在讨论范围内。
  • 我需要这是完全动态的,没有硬编码条件,因为这种条件的性质不断变化。
  • 我已经搜索了很多解决方案,但发现非有效。这是我的最后一个资源。

我希望自己在第一篇文章中能够明确地表达清楚。

请帮助我!

非常感谢!!

编辑1:澄清..

我的最终结果是为每个测试为正的条件生成一个要插入一个特定表的新行。要插入的信息和目标表与手中的问题无关。贷款类型,客户和费率只是测试条件的例子。我的问题是我不能使用字符串内容作为行列的名称。

1 个答案:

答案 0 :(得分:2)

你可以用Reflection做到这一点。 使用System.Reflection添加&#34;&#34;到名称空间 - 然后你可以使用以下代码:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{

    string sColumn = "Name";
    string sFind = "John";

    foreach (PropertyInfo p in Row.GetType().GetProperties())
    {

        string sval;

        if (p.Name.ToString() == sColumn)
        {

            sval = p.GetValue(Row, null).ToString();

            if (sval != sFind) 
            {
                //Do Stuff
            }

        }


    }

}

在本例中,我将String1(要检查的列)硬编码为Name,将String2(要检查的值)硬编码为John。