【问题标题】:pass multiple dates to foreach loop container将多个日期传递给 foreach 循环容器
【发布时间】:2020-01-24 16:59:33
【问题描述】:

我有一个过程,我想传递多个尚未加载到我的 foreach 循环容器的日期,以便一次遍历一个日期。如果表中没有已加载的开始日期,我在 where 子句中有 isnull 来告诉它从该表的最小日期开始。目前,如果表中有一个日期已加载,它将从表中获取下一个日历日期以进行处理,但不会遍历所有日期。我的目标是让它通过所有尚未加载的日期,并一次遍历每个日期。所以我想做的是从 ods.CalendarDate 获取最小和最大日期,并加载这些日期之间的所有内容,包括那些尚未加载到 dbo.Customerinformation 的日期。以下是我目前的查询,请帮我把它改到它将选择所有尚未从表中处理的日期的位置。谢谢

    DECLARE @ProcessAllDataSet BIT = ?
    DECLARE @StartDate Date =?
    DECLARE @EndDate date = ?

   IF @LoadFullDataSet = 1
      BEGIN 
      SELECT @StartDate = MIN(StartDate),
         @EndDate = Max(StartDate) FROM dbo.CustomerInformation 
        END 

      SELECT DateProcessed = MIN(DateCalendar)
      FROM ods.CalendarDate c
      WHERE c.CalendarDate > ISNULL(@EndDate,'2001-01-01')

【问题讨论】:

    标签: sql sql-server ssis foreach-loop-container


    【解决方案1】:

    我认为你很接近。我假设ods.CalendarDate 是日历日期表。如果是这样,只需修改您的查询以返回您的@StartDate 和@EndDate 之间的所有日期。确保将Execute SQL TaskResultSet 属性设置为Full Result Set,并将结果映射到对象类型的SSIS 变量。

    DECLARE @ProcessAllDataSet BIT = ?
    DECLARE @StartDate Date =?
    DECLARE @EndDate date = ?
    
    IF @ProcessAllDataSet = 1
    BEGIN 
        SELECT 
            @StartDate = MIN(StartDate),
            @EndDate = Max(StartDate) 
        FROM dbo.CustomerInformation 
    END 
    
    SELECT 
        DateProcessed = DateCalendar
    FROM ods.CalendarDate c
    WHERE c.CalendarDate BETWEEN ISNULL(@StartDate,'2001-01-01') AND ISNULL(@EndDate,'2100-01-01')
    

    然后将您的Foreach Loop 设置为使用Foreach ADO Enumerator 并将您的Object 变量用作ADO object source variable。将 DateProcessed 字段映射到 Date 变量,然后您可以在迭代过程时使用该 Date 变量。

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多