Пакет служб SSIS не выйдет из строя даже при неправильных входных данных - PullRequest
0 голосов
/ 10 марта 2010

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

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

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

Запуск пакета служб SSIS «Пакет служб SSIS 01.dtsx».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 02 октября 2014

Также другое исправление: Вставьте оператор SET NOCOUNT ON в начале команды SQL

Я узнал об этом по адресу: http://louiebao.net/ssis-package-succeeded-without-errors-but-wrote-0-rows/

0 голосов
/ 11 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...