SSIS包循环在同一个数据库的同一个包中运行

时间:2017-09-04 13:00:05

标签: ssis sql-server-2014

大家好我每个人都在使用sqlserverdatatools 2014来开发我的ssis包在这里我陷入了困境 我有一个包,它有4个数据流,它应该在下面的循环中运行 1,2,3,4 2,3,4 3,4 4 1,2,3,4 所有数据流都在更新相同的数据流,但由于某些业务计算,包应该运行在逻辑之上,请帮助我如何实现这一目标 提前致谢 [R Hari krish

2 个答案:

答案 0 :(得分:0)

这是一个解决方案。

  1. 1.添加sql表达式
    1. 连接到任何数据库
    2. 将结果集更改为结果集
    3. 输入以下sql:select * from(values(1),(2),(3),(4),(5))as(nums)
    4. 将结果保存到ADO对象
    5. 添加foreach循环
    6. 该集合是ADO.net对象
    7. 将其设置为ADO对象
    8. 添加表达式(将1 = 1放入以验证
    9. 添加4个数据流
    10. 连接至DF1
    11. 将表达式添加到flow @ num< 2 || @ num == 5
    12. 做同样的事情,除了改变表达式@ num< 3 || @ num == 5
  2. 最终结果将是在每个循环中处理以下DF的5个循环:

    1st:1-4

    2nd:2-4

    3rd:3-4

    4th:4

    第5:1-4

答案 1 :(得分:0)

以下是您需要做的事情 -

  1. 创建一个表dbo.DataFlowOrder,其列为Id int并插入值(1,2,3,4 2,3,4,3,4,4,1,2,3,4)
  2. 创建以下变量 - intDataFlowOrderId,objDataFlowOrderIdList,strSQLGetDataFlowOrderIdList
  3. 设置strSQLGetDataFlowOrderIdList的值如下 -

    从dbo.DataFlowOrder

  4. 中选择ID
  5. 拖动“执行SQL任务”。将“ResultSet”属性设置为“完整结果集”,将“SQL源类型”设置为“变量”。提供适当的连接并将'Source Variable'设置为strDataFlowOrderIdList。在“结果集”下单击“添加”。将“结果名称”设为0,将“变量名称”设为objDataFlowOrderIdList。

  6. 拖动“Foreach循环”容器并将其连接到上述任务的输出。将'Enumerator'设置为'Foreach ADO枚举器'并将enumaration变量设置为'objDataFlowOrderIdList'。在“变量映射”选项卡中,将“变量”设置为“intDataFlowOrderId”
  7. 在“Foreach循环”容器中,拖动“执行SQL任务”并将其重命名为“SQL - DFT协调员”。设置适当的连接值并将SQLStatement设置为“select 1”。
  8. 将所有4个DFT拖入其中。将上述任务的输出连接到所有4个DFT。
  9. 在每个“Precedence Constraints”连接器中,将“Evaluation operation”设置为“Expression and Constraint”。 '优先约束'只不过是绿线,即您在任务与任务之间连接的输出。对于第一个DFT,将'Expression'设置为'@ [User :: intDataFlowOrderId] == 1'(不带引号)。对剩余的DFT重复相同的过程,使用适当的数字,即2,3,4等。
  10. 以下是控制流应如何显示的截图 - Control Flow Overview

    以下是“优先约束”的屏幕截图 - Precedence Constraint setting