将Execute Sql Task Result set对象传递给For Each Loop容器

时间:2012-07-30 07:51:35

标签: ssis

我在Script Task中编写了一个oracle查询并将其分配给字符串变量。这是我的查询

string oracle_query = "SELECT bank_ID, Branch_ID, Trans_NUM, Trans_DT, convert(Varchar(25),quantity) AS quantity  FROM OPENQUERY(orcale_server_name,  'SELECT * "
                + "FROM oracletable" +
                 " where bank_ID =''" + Dts.Variables["User::bank_ID"].Value.ToString() + "'' AND Trans_DT = ''" + Dts.Variables["User::Trans_DT"].Value.ToString() + "'' AND quantity = " + Dts.Variables["User::quantity"].Value.ToString() + " AND Branch_ID = ''" + Dts.Variables["User::Branch_ID"].Value.ToString() + "'' ')"; 

此查询的结果已分配给我已在包中声明的字符串变量

Dts.Variables["oraclequery"].Value = oracle_query; .  

此查询的输出是

bank_ID  Branch_ID  Trans_Num  Trans_DT   Quantity  
12         13       12AS566    2012-01-01  4000     

基于Trans_Num列,我需要再更新一个表。

我可以使用oledb TranFormation而不是脚本任务,但在Oledb Source中传递Running参数时,没有数据可用。

因此,我已将脚本任务的结果分配给OracleQuery varibale,并在Execute Sql Task和resultset中作为源变量传递为完整结果集

我已经为每个循环容器和内部varibale索引传递了这个执行SQl任务结果集我已经分配了OracleQuery Varibale。

但仍然没有填充数据

1 个答案:

答案 0 :(得分:2)

1.首先,您需要为从oracle查询中检索的列创建变量

2.然后变量oraclequery的类型应为System.Object

3.在执行SQL任务的resultSet选项卡中,将结果分配给变量oraclequery

ResultName    VariableName 
 0            oraclequery 

4.然后在ForEach循环中使用ADO Enumerator并选择ADO Object SourceVariable到oraclequery并单击单选按钮Rows in the First Table

在每个循环的变量映射中,按照从查询中检索的顺序映射列。

 Variable     Index 
  BankId       0
  Branch_ID    1 
 ....          ..

现在,您可以在位于Foreach循环中的DFT内部访问这些变量,然后使用OLEDB component根据Trans_Num

更新另一个表

有关详细信息,请参阅此articlethis