【问题标题】:Executing stored procedure in a loop until a condition is met using SSIS在循环中执行存储过程,直到使用 SSIS 满足条件
【发布时间】:2018-08-10 09:56:42
【问题描述】:

我有一个客户表,其字段必须使用最近的更改进行更新,并且在同一个表中还有一个附加列指定该特定行是否已更新,我有一个为我执行此操作的过程

CustomerID  CustomerName Address Updated
   1           abc         xyz      Yes
   2           cdb         tyy       No

正如您在上面看到的,由于没有与客户端服务器的连接,第二行尚未更新。稍后当与服务器的连接可用时,我所要做的就是将列值更新为空白并运行再次执行该过程,直到该行被任何更改更新。

我必须循环执行此过程,直到更新表中的所有行。 有人可以帮我在 SSIS 中做到这一点

【问题讨论】:

  • 只需在顶部添加一个执行 SQL 任务,将所有 Updated = No 更新为 '' - 然后您可以一遍又一遍地运行流程。
  • 是否有可能在没有任何人工干预的情况下实现 if 条件或循环?
  • 为什么不一次提取所有需要的记录而不是循环遍历呢?

标签: sql sql-server loops stored-procedures ssis


【解决方案1】:

以下将允许您的存储过程运行,直到所有行都已更新。需要注意几件重要的事情,如果可能会有一个或多个迭代,其中表中的行不会被更新,则需要将一个条件(例如 T-SQL IF 语句)添加到第二个执行 SQL 任务以检查这一点并相应地为变量分配一个值。此外,参数语法(使用 ? 作为参数占位符)适用于 OLE DB 连接。

  • 添加一个For循环容器,在EvalExpression字段中,选择一个int变量并将条件设置为不等于0的变量,即@[User::Count] != 0
  • 在 For Loop 容器中,添加执行存储过程的 Execute SQL 任务
  • 添加另一个执行 SQL 任务,该任务链接到第一个任务并仍在 For 循环内,该任务有一个查询,该查询返回表中的行数,但没有更新值,该值将映射到 For 循环中的变量,例如作为

select ? = count(*) from dbo.YourTable where Updated != 'Yes'

  • 在第二个执行 SQL 任务中,转到“参数映射”窗格,在“变量名称”字段中选择您的变量,将“方向”设置为“输出”,将“数据类型”设置为“长”,将“参数名称”设置为 0。参数大小可以保持在默认值为 -1。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2018-06-29
    相关资源
    最近更新 更多