Ssis 如何在For循环容器中循环存储为数字的日期值?

Ssis 如何在For循环容器中循环存储为数字的日期值?,ssis,Ssis,我有一个For循环容器,使用日期作为InitExpression(@Load\u date),但该值是数字格式(20120229),我需要这样做,因为我无法修改它 现在,我想设置AssingExpression值,这样@Load\u Date变量就可以像日期一样递增。换句话说,分配给变量@Load_Date的数值20120229应该增加到20120301,因为这是下一个逻辑日期 如何在SSIS包中的For loop容器中实现这一点?将循环驱动程序存储为日期,这样它就可以进行日期运算,然后使用一个

我有一个
For循环容器
,使用日期作为
InitExpression
(@Load\u date),但该值是数字格式(20120229),我需要这样做,因为我无法修改它

现在,我想设置
AssingExpression
值,这样@Load\u Date变量就可以像日期一样递增。换句话说,分配给变量@Load_Date的数值20120229应该增加到20120301,因为这是下一个逻辑日期


如何在SSIS包中的For loop容器中实现这一点?

将循环驱动程序存储为日期,这样它就可以进行日期运算,然后使用一个由基于该日期的表达式驱动的变量,将其转换为内部使用所需的格式。

以下是一种可能的方法。下面的示例使用了SSIS 2012

假设您有两个变量,其中包含最小和最大日期范围,但它们以数字格式存储,并且您仍然希望这些值遵守日期规则

声明以下变量:

  • MinInteger
    -此数据类型的变量
    Int32
    将以数字格式存储最小日期值。如果您使用的是SSIS 2012,建议将其创建为参数,以便在运行时轻松配置值

  • MaxInteger
    -此数据类型的变量
    Int32
    将以数字格式存储最大值日期值。如果您使用的是SSIS 2012,建议将其创建为参数,以便在运行时轻松配置值

  • MinString
    -此数据类型的变量
    String
    将数字格式中的最小日期值转换为字符串,以便在拆分值以创建日期格式时更容易使用。将表达式设置为
    (DT_WSTR,10)@[User::MinInteger]

  • MaxString
    -此数据类型的变量
    String
    将数字格式中的最大日期值转换为字符串,以便在拆分值以创建日期格式时更容易使用。将表达式设置为
    (DT_WSTR,10)@[User::MaxInteger]

  • MinDate
    -此数据类型的变量
    DateTime
    将分割最小日期的字符串值以形成日期值。将此变量的表达式设置为以下值:

(dtu日期)(子字符串(@[User::MinString],1,4)+“-”+子字符串(@[User::MinString],5,2)+“-”+子字符串(@[User::MinString],7,2))

  • MaxDate
    -此数据类型的变量
    DateTime
    将拆分最大日期的字符串值以形成日期值。将此变量的表达式设置为以下值:
(dtu日期)(子字符串(@[User::MaxString],1,4)+“-”+子字符串(@[User::MaxString],5,2)+“-”+子字符串(@[User::MaxString],7,2))

如果您使用的是SSIS 2008 R2或以前的版本,则需要将上述最后四个变量的EvaluatesExpression属性设置为True

  • Loop
    -此数据类型的变量
    DateTime
    将用于循环For循环容器中的日期值

配置For循环容器,如下所示:

  • InitExpression:
    @[User::Loop]=@[User::MinDate]
  • EvalExpression:
    @[User::Loop]
    
    public void Main()
    {
        MessageBox.Show(string.Format("Current loop variable value: {0}", Dts.Variables["Loop"].Value.ToString()));
        Dts.TaskResult = (int)ScriptResults.Success;
    }