使用SSIS循环执行存储过程,直到满足条件为止

时间:2018-08-10 09:56:42

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

我有一个customers表,该表的字段必须使用最近的更改进行更新,并且在同一表中还有一个附加列,用于指定该特定行是否已更新,我有一个过程可以为我做这件事

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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