有条件地循环并执行 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
中映射了 ProcID
和 ProcName
的变量。在每个循环中过滤 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 之前的优先约束,因为枚举器将仅包含当前章节的过程。下面是这种技术的一个例子。
我目前有一个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
中映射了 ProcID
和 ProcName
的变量。在每个循环中过滤 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 之前的优先约束,因为枚举器将仅包含当前章节的过程。下面是这种技术的一个例子。