Да, это возможно. В потоке данных вам нужно будет определить максимальную дату, которая у вас уже есть. Затем вам необходимо объединить два потока данных в столбце даты. Оттуда вы будете подавать его в УСЛОВНОЕ РАЗДЕЛЕНИЕ и делить там, где столбцы даты совпадают [т.е. ISNULL ()] и не совпадают [то есть ISNULL ()]. В вашем случае вы хотите только совпадения. Несоответствия будут проигнорированы.
Примечание: если вы используете INNER JOIN в MERGE JOIN, где есть только одна дата (т. Е. MaxDate), чтобы присоединиться, то это позаботится о фильтрации строк. Вам не понадобится УСЛОВНЫЕ РАЗДЕЛЕНИЯ.
Добро пожаловать в ETL.
Обновление
Реальная боль в том, что MERGE JOIN-ы SSIS выполняют соединения только для операций EQUAL, а не для операций LESS THAN и GREATER THAN. Вам нужно будет разделить потоки данных.
- Используйте компонент сценария для сканирования файла Excel на наличие максимальной даты и назначения этого значения переменной пакета в SSIS. Кроме того, вы можете создать таблицу дат в SQL Server, а затем использовать команду «Выполнить SQL» в службах SSIS, чтобы извлечь максимальную дату из таблицы и присвоить это значение переменной пакета
- Измените существующий поток данных, чтобы полностью удалить чтение файла даты в Excel. Затем добавьте преобразование DERIVED COLUMN и добавьте новый столбец, который сопоставлен с переменной пакета в SSIS, в которой хранится МАКСИМАЛЬНАЯ дата. Имя производного столбца можно назвать «MaxDate»
- Добавить преобразование условного разбиения со следующей логикой CONDITION:
[AsOfDt] <= [MaxDate]
- Установить имя вывода для вставки записей
Примечание: CONDITIONAL SPLIT создает новый поток выходных данных с ограниченными / отфильтрованными строками. не создает новый столбец в существующем потоке данных. Думайте об этом как о переносе потока данных от модификации столбца к модификации строки. Только те строки, которые соответствуют условию, будут отправлены на вывод, который вы хотите. Я предполагаю, что вы хотите вставить только эти записи, поэтому я назвал это так. Вы можете выбрать любое соглашение о присвоении имен, которое вы предпочитаете
Примечание 2: Извините, что не сделал Обновление моим исходным ответом - раньше я не использовал преобразование AGGREGATE, поэтому я не знал, что оно ограничивает вывод строки, а не считывает значение в потоке данных и затем назначает его Переменная. Это было бы потрясающим преобразованием для Microsoft для добавления в SSIS. Похоже, что преобразования ROWCOUNT и SCRIPT COMPONENT - единственные, которые могут задавать значение переменной пакета в потоке данных.