Сбой пакета служб SSIS с новой структурой плоского файла - PullRequest
0 голосов
/ 04 декабря 2009

Пакет служб SSIS просто импортируется из TXT-файла в базу данных SQL. когда мы сделали, что пакет использовал старый файл и он выполнялся нормально. старый исходный файл получил (10 столбцов) новый исходный файл получил 15 столбцов. когда исходный файл изменил свой сбой. [Источник плоского файла [1]] Ошибка: преобразование данных не выполнено. Преобразование данных для столбца «Столбец 10» вернуло значение состояния 4 и текст состояния «Текст был усечен или один или несколько символов не соответствовали целевой кодовой странице». Вариация в столбцах сделала проблему как решить это лучше? Если файлы старого и нового форматов необходимо обрабатывать одним и тем же пакетом.

Спасибо

1 Ответ

3 голосов
/ 04 декабря 2009

Если я правильно понимаю ваш вопрос, у вас есть файл (с тем же именем файла, который я предполагаю), который имеет либо старый, либо новый формат файла и не работает, потому что ваш источник плоских файлов имеет только старую (10 столбцов) схему файла данных? Если это так, я бы создал логическую переменную и назвал бы ее как isOldFormat. Затем я бы использовал задачу сценария в вашем потоке управления, чтобы определить, имеет ли он 10 или 15 столбцов. Псевдокод будет выглядеть примерно так:

1) Открыть плоский файл 2) Подсчитать столбцы в соответствии с вашим разделителем 3) Состояние Состояние:

Если столбцы. Количество = 10 isOldFormat = True Иначе, если столбцы. Количество = 15 isOldFormat = False еще ошибка выброса

Тогда я бы создал другой поток данных, который имел бы новую схему формата файла (теперь в основном у вас есть два потока данных - один со старым форматом файла и один с новым).

После этого шага вы должны перетащить ограничение приоритета из задачи скрипта во вновь созданный поток данных, а одно - в старый поток данных. Двойным щелчком по ограничению приоритета вы должны установить для свойства операции оценщика значение Expression и ввести в поле Expression @isOldFormat == true для ограничения, идущего в поток данных, который содержит старый источник плоских файлов, и @isOldFormat == false. для другого потока данных. То, что это будет делать, будет выполнять только один или другой поток данных на основе переменной, заданной в вашей задаче сценария.

Надеюсь, это поможет.

...