ssis-如何从SSIS控制流程中连续检查表中的作业状态?

时间:2018-04-04 17:56:10

标签: sql-server ssis

我们有一个要求,SSIS作业应根据维护状态表中的值的可用性触发,这里要记住我们不确定状态何时可用的确切时间因此我的SSIS进程必须继续在状态表中查找值,如果状态表中有值(例如:成功),那么作业应该触发。我们有20个不同的ssis批处理,它们应该根据相应的/相关的状态值调用。

4 个答案:

答案 0 :(得分:1)

你能做的是:

  1. 计划经常运行的SSIS包。
  2. 对于该计划程序包,将表中的值分配给程序包变量
  3. 使用任一表达式禁用任务或约束表达式以使程序包继续运行。

答案 1 :(得分:0)

启动SSIS包需要一些时间。所以我建议创建一个具有以下结构的包:

  1. 包变量Check_run输入int,初始值1440(如果我们每分钟运行检查,则在24小时后停止运行)。这是为了避免无限包运行。
  2. 设置 For Loop ,检查Check_run是否大于零,并在每次循环运行时减少它。
  3. 在For循环中检查 Exec SQL 任务中的标志变量,选择单个结果值并将其结果分配给变量,例如Flag
  4. 根据Flag变量值创建条件执行分支。如果Flag变量设置为运行 - 启动其他包。否则 - 使用 Exec SQL 命令waitfor delay '01:00'
  5. 等待一分钟

答案 2 :(得分:0)

你提到了单词trigger。当状态列满足运行包的条件时,如何创建触发器:

这也是如何从T-SQL运行包: https://www.timmitchell.net/post/2016/11/28/a-better-way-to-execute-ssis-packages-with-t-sql/

您可能需要考虑创建一个主程序包来运行与此触发器关联的所有程序包。

答案 3 :(得分:0)

我会采用@ Long的方法,但通过执行以下操作来增强它:

1。)使用“执行SQL任务”查询状态表以查找与特定作业功能相关的所有记录,并将结果加载到记录集中。注意:要加载记录集的变量必须是object类型。

2.。)创建一个ADO类型的Foreach循环枚举器,以循环记录集。

3。)做的事情。

4.。)作业完成后,返回状态表并标记记录完整,以便不再处理。

5.)将作业设置为定期运行(例如,分钟,每小时,每天等)。

增强听到的是,不需要任何标志来管理工作。如果存在记录,则foreach循环完成其工作。如果记录集中不存在任何记录,则作业将成功退出。这简化了设计。