【发布时间】:2019-02-28 20:02:54
【问题描述】:
我正在与专家联系,因为我最近的一个项目遇到了困难。我创建了一个 SSIS 包 (2008R2),它使用脚本任务构建 SQL 语句,其中在 SQL 语句中使用变量 (@month1) 来指定成员表中的一个月回顾。我还想使用@month1 变量作为循环容器的“计数器”来指定执行查询的次数。 SQL 查询附加到数据流任务以将这些记录附加到 SQL 服务器数据库上的表中。脚本任务和数据流任务在 for 循环容器之外工作,为 @month1 变量提供初始值,但我无法弄清楚如何使 for 循环容器更新 @month1 "counter" 变量,以便 for每个循环都可以将其用作“计数器”,SQL 语句可以将其用作创建的 SQL 语句中的条件。有人对如何做到这一点有任何想法或例子吗?
** 更新 ** For Loop 容器是问题所在。脚本任务和数据流任务在 For Loop 容器之外工作。它将使用 @month1 的初始变量设置并创建动态 sql 脚本、执行脚本并将数据从源数据库服务器传输到目标源服务器。问题是当我将这些步骤放在 For Loop 容器中时,容器会执行并变为绿色,但不会调用其中的步骤。这就是为什么我认为容器没有读取变量@month1,即使该变量是在包级别设置的。有什么想法吗?
【问题讨论】:
-
所有表都在同一个服务器吗?如果是这样,我建议您在存储过程中执行此操作,而不是在 SSIS 中。如果您必须在 SSIS 中执行此操作,则需要将此增量放入 迭代表达式 docs.microsoft.com/en-us/sql/integration-services/control-flow/…
-
嗨尼克,不幸的是,这些表不在同一台服务器上,我的组织不允许“链接服务器”。数据位于我只有读取权限的生产机器上,我将其移动到测试服务器/数据库以进行初始开发和概念验证。我已经更新了 For Loop 容器中的那些字段以指定迭代,但它似乎没有读取变量。
-
不允许链接服务器是个好主意。所以你肯定需要使用 SSIS。我重新阅读了您的描述,听起来您只需要将数据流 inside for 循环。当您说“似乎没有”之类的话并且您的解释有点模糊时,您似乎确实需要对问题进行更多分析。当您以交互方式运行包时会发生什么?循环没有重复运行还是看不到预期的数据?
-
嗨,对不起,尼克以为我在最初的帖子中提到了这一点。当放置在 For 循环中时,一切都“运行”成功,因为它变成绿色,但没有数据移动。所以这让我相信该变量没有被读取或可用于 For Loop 容器。我在包级别设置了变量范围,并为 InitExpression 设置了 @[User::month1],为 EvalExpression 设置了 @[User::month1]
-
尝试将数据流的
Delay validation属性设置为true
标签: sql sql-server for-loop ssis ssis-2008