SSIS - 通过字符串变量填充对象变量

时间:2017-10-12 15:17:55

标签: c# variables object ssis

如果我在SSIS中有一个包含由逗号(或任何其他标准字符)分隔的值列表的字符串变量 - 是否可以将这些值加载到对象变量中,以便我可以使用Object变量作为resultSet枚举器并循环遍历每个值?

[编辑]只是为了澄清情况 - 我有约。 15个变量,每个变量包含1或0 - 每个变量确定在作业期间是否需要处理特定的SSAS表(1 =是,需要处理0 =否,不处理它)。

我现在要做的是将WERE处理的表名存储在一个对象变量中,然后循环遍历该列表,为每个列表写一个日志条目,说明它在此作业中已被处理。

[编辑#2] 我不是很好解释,但让我试着总结一下 - 这是目前的情况:

我有一个名为strPartitionArray的变量 - 这个变量现在将包含以逗号分隔的字符串,由此表达式确定(明白这有缺陷 - 特别是如果DimAbsenceUpdate为0,它都会崩溃,但希望找出一个单独修复):

(
@[User::DimAbsenceUpdate]  == 1 ?
"Absence":""
)

+ (
@[User::DimGradeUpdate]  == 1 ?
",Grade":""
)


+ (
@[User::DimContractUpdate]  == 1 ?
",Contract":""
)

+ (
@[User::DimEmployeeUpdate]  == 1 ?
" ,Employee":""
)

因此,作为一个例子,现在,该变量的值是:缺勤,成绩,合同

我需要将它存储在一个对象变量中,这样我就可以将这三个条目(缺勤,成绩,合同)作为SQL任务的一部分进行循环,因此,使用下面的代码,我试图将这三个条目分开单词到一个名为RecordProcessDateTime的对象

    public void Main()
    {
        String tmp = Dts.Variables["User::strPartitionArray"].ToString();

        String[] tmpArray = tmp.Split(',');

        Dts.Variables["User::RecordProcessDateTime"].Value = tmpArray;

        Dts.TaskResult = (int)ScriptResults.Success;
    }

假设上面的代码有效,我想使用RecordProcessDateTime作为Foreach循环的枚举器 - 运行这三个单词中的每一个。 容器中的SQL任务将写入日志条目。部分SQL任务将有问题的单词(缺勤,成绩和合同)写入日志条目 - 这基本上让我知道缺少SSAS表已被处理。

因此,我将Script,Foreach循环(包含SQL任务)全部放入序列容器中。当我运行序列容器时,它工作(!)但只写入一个条目到日志(当它应该写3时),并且该条目不包括3个单词中的任何一个,它包括:'Microsoft.SqlServer。 Dts.Runtime.Variable'

我的假设是脚本实际上没有按预期将这3个值放入Object变量,这就是为什么foreach循环只运行一次并且不包含任何单词。

2 个答案:

答案 0 :(得分:0)

使用此链接:

SSIS Script Task: Populate object variable from Array

使用Split函数填充数组。

答案 1 :(得分:0)

如果你在SSIS中有一个字符串变量,那就像你说的那样形成,你可以简单地将整个字符串读成一个字符串

String tmp = Dts.Variables["User::DimAbsence"].ToString();
然后只需Split将它变成一个字符串数组

String[] tmpArray = tmp.Split(null); /* null means the default separator (whitespace)*/

这样,您就可以在同一索引处从SSIS访问与同一逻辑对象相对应的变量。

你问的第二部分对我来说有点奇怪,如果你向我澄清,我会帮助你。