2009-12-04 2 views
0

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

Благодаря

ответ

3

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

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

Если columns.Count = 10 isOldFormat = True Else If столбцов. Count = 15 isOldFormat = False Else ошибка броска

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

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

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

+0

Спасибо за отличную идею. – rmdussa