如果我在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循环只运行一次并且不包含任何单词。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果你在SSIS中有一个字符串变量,那就像你说的那样形成,你可以简单地将整个字符串读成一个字符串
String tmp = Dts.Variables["User::DimAbsence"].ToString();
然后只需Split
将它变成一个字符串数组
String[] tmpArray = tmp.Split(null); /* null means the default separator (whitespace)*/
这样,您就可以在同一索引处从SSIS访问与同一逻辑对象相对应的变量。
你问的第二部分对我来说有点奇怪,如果你向我澄清,我会帮助你。