Ну, мне пришлось сделать что-то похожее, когда я получил разные файлы в разных форматах от разных поставщиков, и все они должны были пойти в одно и то же место. Я создал контейнер For Each Loop, который запускается через файлы, и первый шаг цикла определяет путь, по которому он идет. Затем я написал отдельный поток данных для каждого пути.
Вы можете сделать это с таблицей, в которой перечислены ожидаемые столбцы для каждой версии, а затем отправит ее по пути для версии, которой она соответствует.
В качестве альтернативы, если вам известна версия, имеющаяся у каждого клиента, вы можете иметь таблицу, в которой она хранится, и по кастомериде определить, какой путь.
Или вы можете написать новый пакет для каждой версии (включая версию в имени), чтобы избежать наличия 20 разных путей в одном пакете служб SSIS. Затем создайте для каждого цикла в вызывающем пакете служб SSIS, а затем отправьте файл правильной версии. Или просто настройте разные задания для каждого клиента, зная, в какой версии ppackage они находятся. Затем вы можете просто изменить пакет ssis на их рабочие вызовы при обновлении до новой версии.