2009-12-09 87 views
1

好运用的foreach循环容器的变量,我有一个简单的过程...在SQL任务[SSIS]

  1. 读表,并获得该行有 一1“StatusID”简单。

    从PreorderStatus选择的ProductID其中StatusID = 1个

  2. FOREACH行从 查询返回,执行动作。对于 简单起见,我们只需要修改 原始表到 “StatusID”设置为2

    更新PreorderStatus设置StatusID = 2,其中的ProductID = @ProductID

为了在做到这一点SSIS,我用第一条语句创建了一个简单的“执行SQL任务”。在编辑器中,我已经设置了结果集返回一个完整结果集结果名称为0被设置为填充名为ReadySet的对象变量。

输出然后路由到For Each Loop容器。 枚举器设置为Foreach ADO枚举器和从上面设置为ReadySet变量的对象源变量。我还将变量v_ProductID映射到索引0.

在Foreach循环开始时设置断点显示正确设置的变量。大!!现在到第二步....

现在我已经在foreach容器中放置了一个新的SQL任务。现在我有一个头刮刀。我如何在SQL语句中实际使用变量?简单地使用“v___ProductID”或“User :: v_ProductID”似乎不起作用。映射一个参数似乎是一个好主意(得到@ProductID和一切!),但似乎也没有工作。

我觉得我错过了一些非常简单的东西,但不知道是什么。谢谢你的帮助!!

回答

1

我认为这是一个更好的办法。以下是大致的步骤:

  1. 将DataFlow任务拖放到设计图面上。
  2. 打开它并添加一个OLE DB源和OLEDB命令组件到设计界面。
  3. 修改源以使用您描述的查询。
  4. 将源连接到Command组件。
  5. 修改命令组件使用“Update PreorderStatus set StatusID = 2 where ProductID =?”查询并在param映射页面上映射?变量来自数据源的输入。

HTH

+0

诀窍是 '?'。显然,我忘记了我在SRS上的所有工作,并依靠我的存储过程完成所有使用命名参数的工作。去搞清楚。还值得一提的是,当映射的时候?到一个可变的你使用基于零的序数位置(0,1等)。 – Craig 2009-12-10 15:29:36

0

当我想要使用execute sql任务并根据变量改变某些内容时,我使用存储过程并将该变量设置为proc的输入参数。

然后,设置在执行SQL任务parmeter和SQL语句设置为一样的东西:

exec myproc ?