如何在 SSIS 中配置 foreach 循环容器以获取定义的开始日期和结束日期并针对其间的每个日期运行?

Cam*_*Cam 5 sql-server ssis etl for-loop date

我想在我的 SSIS 包中定义start_date和参数,并有一个为这 2 个日期(含)之间的每个日期运行的容器,该容器执行一个 SQL 查询,获取当前日期值(即从 开始)并将其用作查询的参数。end_dateforeachstart_date

我对 SSIS 编程很陌生,我找不到有关如何执行此操作的信息。

use*_*l89 1

AFor Loop将是执行此操作的更好选择。假设开始日期和结束日期作为问题中所示的包的参数提供,请注意,参数无法在 SSIS 包中更新,但变量可以。下面将进一步详细介绍这一点以及您问题中概述的过程示例。

\n\n
    \n
  • 创建 SSIS 日期时间变量。如前所述,这将用于存储开始日期参数的初始值。
  • \n
  • 接下来在控制流上添加一个 For 循环。在下面的屏幕截图中,变量@[User::vStartDate]设置为与For 循环@[$Package::pStartDate]中的包参数相同的值。InitExpression当开始日期变量小于/等于字段中指定的结束日期参数时,循环迭代将继续EvalExpression
  • \n
  • 在执行 SQL 任务(或者执行 SQL 查询)之后添加脚本任务。这将增加开始日期变量的值,因此请确保这是循环中的最后一个任务。下面是一个示例 C# 脚本,它只是将开始日期 SSIS 变量的值设置为 C# 变量,将 C# 变量增加一天,然后将该值写回 SSIS 变量。确保在ReadWriteVariables脚本任务的字段中添加 SSIS 开始日期变量。这将进入Main脚本的方法,如下所示。虽然 \xe2\x80\x99s 只是在脚本任务中完成日期和变量更新的增量,但从长远来看,如果需要像 C# 那样添加更多逻辑,则可以更轻松地实现长期可持续性提供更多的功能。
  • \n
\n\n

脚本任务:

\n\n
public void Main()\n{\n//get value in current iteration of loop\nDateTime currentIterationValue = Convert.ToDateTime(Dts.Variables["User::vStartDate"].Value);\n\n//increment by one day\ncurrentIterationValue = currentIterationValue.AddDays(1);\n\n//update SSIS variable\nDts.Variables["User::vStartDate"].Value = currentIterationValue;\n\nDts.TaskResult = (int)ScriptResults.Success;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n