2010-03-10 2 views
0

У меня есть пакет SSIS, который не будет выходить из строя даже при плохом вводе. В моем случае этот пакет читается из плоского файла и помещает записи в таблицу SQL Server. Довольно просто, ничего особенного здесь не происходит.Пакет SSIS не сбой, даже с плохими входными данными

Плоский файл определяется как оборванный справа, 80 символов в строке, может быть, всего 10 столбцов. Проблема: иногда плоский файл не заполняется до 80 символов, поэтому мы получаем строки переменной длины, а не пробелы, заполняющие остальные. Мы хотим, чтобы пакет был неудачным, когда это произойдет.

В моем компоненте источника исходного файла у меня есть раздел вывода ошибок, настроенный так, что если любой столбец усечен, компонент завершится с ошибкой. Тем не менее по какой-то причине все этапы являются зелеными, когда я запускаю пакет из Visual Studio, хотя ни одна строка не импортируется. Вот результат, который я получаю:

SSIS-пакет «SSIS Package 01.dtsx», начиная с.

Информация: 0x4004300A при импорте данных в таблицу01, DTS.Pipeline: фаза проверки начинается.

Информация: 0x4004300A при импорте данных в таблицу01, DTS.Pipeline: фаза проверки начинается.

Информация: 0x40043006 при импорте данных в таблицу01, DTS.Pipeline: подготовка к стадии выполнения начинается.

Информация: 0x40043007 при импорте данных в таблицу01, DTS.Pipeline: начинается предварительная реализация фазы.

Информация: 0x402090DC при импорте данных в таблицу01, файл с плоским файлом [1]: началась обработка файла «C: \ import_files \ sampledata.dat».

Информация: 0x4004300C при импорте данных в таблицу01, DTS.Pipeline: выполняется этап выполнения.

Предупреждение: 0x8020200F при импорте данных в таблицу01, файл с плоским файлом [1]: в конце файла есть частичная строка.

Информация: 0x402090DE при импорте данных в Table01, Flat File Source [1]: Общее количество строк данных, обрабатываемых в файле "C: \ import_files \ sampledata.dat" 0.

Информация: 0x402090DF на Импорт данных в таблицу01, назначение OLE DB [5467]: Завершена окончательная фиксация для ввода данных.

Информация: 0x402090E0 при импорте данных в таблицу01, назначение OLE DB [5467]: окончательная фиксация для вставки данных завершена.

Информация: 0x40043008 при импорте данных в таблицу01, DTS.Pipeline: начинается этап выполнения.

Информация: 0x402090DD при импорте данных в таблицу01, файл с плоским файлом [1]: обработка файла «C: \ import_files \ sampledata.dat» завершена.

Информация: 0x40043009 при импорте данных в таблицу01, DTS.Pipeline: начинается этап очистки.

Информация: 0x4004300B при импорте данных в таблицу01, DTS.Pipeline: «компонент» OLE DB Destination «(5467)» написал 0 строк.

.... поэтому никаких записей не импортировано, и есть предупреждения о частичных строках, но пакет успешно завершен.Когда на этот пакет подается хороший входной файл, 80 символов в строке, он импортирует столько строк, сколько находится в файле, без проблем.

Странно, что мы имеем другие пакеты SSIS, которые терпят неудачу, когда строки переменной длины используются в качестве входных данных. Я посмотрел и сравнил эти пакеты с этим, и для жизни меня не видно, что они могут делать по-другому.

Если у вас есть какие-либо идеи или выводы, с которыми я мог бы следовать, я был бы благодарен. Благодаря!

ответ

0

Хорошо, у нас это выяснено. Что произошло, последний столбец в каждой строке ожидает CR/LF ColumnDelimiter.

Поэтому, когда первая строка обрабатывается и заканчивается коротким, SSIS не признает CR/LF просто потому, что приходит слишком рано. Вместо этого он продолжается и обрабатывает вторую строку как часть первой. В этом случае вторая строка - это все, что осталось, и мы получаем сообщение об усечении, упомянутое выше, потому что CR/LF никогда не встречается при символе 80.

В случае другого сбоя SSIS, который сбой, число строк достаточно близко к ожидаемой ширине линии, которая, когда пакет пытается набить их в одно поле, вызывает ошибку усечения в этом поле.

Смежные вопросы