2017-10-12 104 views
0

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

[编辑]只是为了澄清情况 - 我有约。每个变量包含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":"" 
) 

因此,作为一个例如,现在,该变量的值是:缺席,等级,合同

我需要这个存储在一个对象变量,以便我可以循环通过这3个条目(缺席,成绩,合同)作为一个SQL任务的一部分,所以,使用下面的代码,我试图分裂出那些3字为对象称为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循环 - 通过每个的那些3个字运行。 容器中的SQL任务将写入一个日志条目。该SQL Task的一部分将有问题的单词(缺席,成绩,然后合同)写入日志条目 - 基本上让我知道没有处理SSAS表。

因此,我已经将脚本,Foreach循环(包含SQL任务)全部放入序列容器中。当我运行序列容器时,它可以工作(!),但只向日志中写入一个条目(当它应该写入3时),并且该条目不包含任何3个字,它就包含这个:'Microsoft.SqlServer。 Dts.Runtime.Variable'

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

+0

是的,你可以做到这一点。 – KeithL

回答

0

如果在SSIS一个字符串变量,照你这么说是良好的,你可以简单地读取整个字符串转换成一个字符串

String tmp = Dts.Variables["User::DimAbsence"].ToString(); 

然后只需Split成字符串

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

通过这种方式,您可以在相同索引处访问SSIS中相同逻辑对象的相应变量。

你问题的第二部分对我来说并不陌生,如果你向我澄清一下,我会在你的帮助下。

+0

我已经使用你上面建议的,并重新编辑我的帖子,以更新我现在卡住的点。 – Celador

+0

您的填充数组的方法不太好,因为如果由于某种原因没有缺席,则字符串将以“,”开头,然后该对象的第一个元素将为空,从而使元素之间分隔“”。 – dbencs

+0

是的,我明白了,我想如果我能让剩下的工作起作用,那么我可以在以后解决这个问题! (也许不是最好的开发方法,但我认为我可以想出一个解决方案)。我现在所做的只是将Absence变量永久设置为= 1,以便它始终存在(直到我找到解决方法) – Celador

0

使用此链接:

SSIS Script Task: Populate object variable from Array

并填充与分割功能的阵列。

+0

Hi @KeithL - 我通读了这篇文章,以及其中的链接,然后沿着c#的一个巨大的兔子洞(其中我完全不知道什么) - 最终尝试了一个稍微不同的解决方案,在我原来的文章中作为编辑概述 - 希望你能帮助得到这个工作 – Celador