передать несколько дат для каждого контейнера l oop - PullRequest
0 голосов
/ 24 января 2020

У меня есть процесс, в котором я хочу передать несколько дат, которые не были загружены в мой контейнер foreach l oop, чтобы перебирать даты по одной за раз. если в таблице нет загруженных дат начала, у меня есть слово isnull в предложении where, чтобы сказать ему начинать с минимальной даты из этой таблицы. В настоящее время, если в загруженной таблице есть дата, она будет извлекать следующую календарную дату из таблицы для обработки, но не будет l oop через все даты. Моя цель состоит в том, чтобы он проходил все даты, которые не были загружены, и перебирал каждую дату по одной. Поэтому я хотел бы взять минимальную и максимальную дату из 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')

1 Ответ

0 голосов
/ 24 января 2020

Я думаю, вы довольно близки. Я предполагаю, ods.CalendarDate это таблица календарных дат. Если это так, просто измените свой запрос, чтобы он возвращал все даты между @StartDate и @EndDate. Убедитесь, что вы установили ResultSet свойство Execute SQL Task на 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 при выполнении итерации по процессу.

...