有条件地循环并执行 SQL Table 中的存储过程

Conditionally Loop Through and Execute Stored Procedures in SQL Table

我目前有一个SQL服务器table由多个存储过程组成,每个存储过程都属于一个父章节。例如:

ID 为 1001-1199 的存储过程属于第 1 章
ID 为 1200-1299 的存储过程属于第 2 章
ID 为 1300-1399 的存储过程属于第 3 章
等...

在 SSIS 上下文中,我为每一章及其存储过程创建了一个 ADO ForEachLoop 容器(总共 8 个章节容器)。目前的目的是每章的循环将访问一个包含整个 table 的对象变量并循环遍历与该章对应的每个存储过程,然后使用 Execute SQL 任务执行它。我想做的是想出一种简单的方法,从对象变量中有条件地 selecting 给定章节的存储过程,并在继续下一章之前执行它们。

因此,例如,第 1 章的循环将 select 只是从 table 对象变量中存储过程 1001-1199 并执行它们,然后继续下一章循环。

我想到了在章节之间使用关于先例约束的表达式,但如果我可以通过循环容器本身将 condition/expression 应用于存储过程的集合,那似乎是理想的。

我对 SSIS 和 SQL 服务器有些陌生,非常感谢任何解决方案建议以及对我的理解的解释。谢谢,麻烦您了。

我假设您已经在现有 ForEachLoop VariableMappings 中映射了 ProcIDProcName 的变量。在每个循环中过滤 ProcID 的唯一剩余任务,以便只处理与上下文章节关联的存储过程。这可以按如下方式完成。

1) 向每个 ForEachLoop 容器添加一个空 Sequence Container

2) Link 每个新 Sequence Container 每个 ForEachLoop 容器

中的第一个(或唯一)任务 Precedence Constraint

3) 在第一个任务之前编辑每个 Precedence Constraint 以指定以下属性:

Evaluate Operation: Expression
Expression (different for each chapter): @[User::ProcID] >= 1001 && @[User::ProcID] <= 1199

下面是这些更改后的包控制流程示例:

如果每个章节的 ForEach 循环除了执行的存储过程外都是相同的,请考虑重构以使用嵌套的 ForEach 循环(即 ForEach Chapter 和 ForEach ChapterStoredProcedure)。 ForEach Chapter 容器的第一个任务将加载上下文章节的过程集合,然后执行 ForEach ChapterStoredProcedure 容器。这种方法不需要内部 ForEach ChapterStoredProcedure 之前的优先约束,因为枚举器将仅包含当前章节的过程。下面是这种技术的一个例子。