Гленн, я чувствую твою боль :)
Служба SSIS не может сделать столбцы динамическими, поскольку ей необходимо сохранять метаданные каждого столбца по мере его поступления, и, поскольку мы работаем с плоскими файлами, которые могут содержать любые данные, он не может предполагать, что CRLF в столбце ' -that-not-that-last-column ', это действительно конец строки данных, которую он должен прочитать.
В отличие от DTS в SQL2000, вы не можете изменять свойства пакета служб SSIS во время выполнения.
Что вы можете сделать, это создать родительский пакет, который читает плоский файл (задача скрипта) и читает только первую строку плоского файла, чтобы получить количество столбцов и имена столбцов. Эта информация может храниться в переменной.
Затем родительский пакет загружает дочерний пакет (снова задача сценария) программным способом и обновляет метаданные исходного соединения дочернего пакета. Это где вы бы либо
1. Добавить / удалить столбцы, чтобы соответствовать плоский файл.
2. Установите разделитель столбцов для столбцов, последний столбец должен быть CRLF - в соответствии с разделителем ROW.
3. Повторно инициализируйте метаданные (ComponentMetadata.ReinitializeMetadata ()) исходного компонента в задаче «Поток данных» (чтобы распознать последние изменения в исходном соединении).
4. Сохраните пакет ssis для ребенка.
Подробная информация о программном изменении пакета доступна только.
Затем ваш родительский пакет просто выполняет дочерний пакет (Execute Package Task), и он будет выполняться с вашими новыми сопоставлениями.