在 SQL 任务中使用 Foreach 循环容器中的变量 [SSIS]

发布于 2024-08-14 06:48:49 字数 849 浏览 9 评论 0原文

好的,我有一个简单的过程...

  1. 读取一个表并获取符合条件的行 “StatusID”为 1。简单。

    从 PreorderStatus 中选择 ProductID,其中 StatusID = 1

  2. Foreach 返回的行 查询,执行操作。为了 为了简单起见,我们修改一下 原始表设置 “StatusID”为 2。

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

为了在 SSIS 中执行此操作,我使用第一条语句创建了一个简单的“执行 SQL 任务”。在编辑器中,我将结果集设置为返回完整结果集,并将结果名称设置为0以填充名为的对象变量准备就绪。

然后,输出将路由到 For Each 循环容器。 Enumerator 设置为 Foreach ADO Enumerator,并将对象源变量设置为上面的 ReadySet 变量。我还将变量 v_ProductID 映射到索引 0。

在 Foreach 循环开始处设置断点会显示变量设置正确。伟大的!!现在进行第二步...

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

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

Ok, I have a simple process...

  1. Read a table and get the rows that
    have a "StatusID" of 1. Simple.

    Select ProductID from PreorderStatus where StatusID = 1

  2. Foreach row returned from that
    query, perform an action. For
    simplicity sake, let's just modify
    the original table to set the
    "StatusID" to 2.

    Update PreorderStatus set StatusID = 2 where ProductID = @ProductID

In order to do this in SSIS, I have created a simple "Execute SQL Task" with the first statement. In the editor I have set the Result Set to return a Full result set and the Result Name of 0 is set to fill an object variable named ReadySet.

The output is then routed to a For Each Loop container. The Enumerator is set to Foreach ADO Enumerator and the object source variable set to the ReadySet variable from above. I have also mapped the variable v_ProductID to index 0.

Setting a breakpoint at the begining of the Foreach loop shows the variable being set correctly. GREAT!! Now on to step two....

Now I have placed a new SQL task in the foreach container. Now I have a head scratcher. How do I actually use the variable in the SQL statement. Simply using "v___ProductID" or "User::v_ProductID" doesn't seem to work. Mapping a parameter seemed like a good idea (got a @ProductID and everything!) but that didn't seem to work either.

I get the feeling that I am missing something pretty simple but can't tell what. Thanks for any help!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮坠入山谷 2024-08-21 06:48:49

我认为有更好的方法。以下是大致步骤:

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

华泰

I think there is a better approach. Here are the approximate steps:

  1. Drag a DataFlow task onto the design surface.
  2. Open it up and add a OLE DB source and OLEDB Command components to the design surface.
  3. Modify the source to use the query you have described.
  4. Connect the source to the Command component.
  5. Modify command component to use "Update PreorderStatus set StatusID = 2 where ProductID = ?" query and on param mapping page map the ? variable to the input coming from the datasource.

HTH

强者自强 2024-08-21 06:48:49

当我想使用执行 sql 任务并根据变量改变某些内容时,我使用存储过程并将变量作为过程的输入参数。

然后在执行 SQL 任务中设置参数并将 SQL 语句设置为如下所示:

exec myproc ?

When I want to use an execute sql task and vary something based on a variable, I use a stored proc and make the variable the input parameter for the proc.

Then you set the parmeter in the execute SQL task and set the SQL statement to something like:

exec myproc ?
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文