Я разрабатываю процесс служб SSIS, который извлекает данные из файлов Excel и загружает их в базу данных SQL Server.
У меня есть отдельные потоки данных для каждого рабочего листа в исходном файле.Файл Excel содержит данные в разных форматах (но может содержать и недопустимые данные), поэтому я использую явное приведение типов.
В случае дат я использую конструкцию cdate(f1) as f1
в операторе SQL (с изменением числа в соответствии со столбцом), чтобы не дать SSIS самостоятельно принять решение о формате даты.
Это обычно работает нормально.Однако в некоторых случаях выдается ошибка, когда я пытаюсь запустить процесс, и в данных содержится недопустимое значение:
[SSIS.Pipeline] Ошибка: код ошибки SSIS DTS_E_PRIMEOUTPUTFAILED.Метод PrimeOutput на My_Excel_Source возвратил код ошибки 0x80040E21.Компонент возвратил код ошибки, когда механизм конвейера вызвал PrimeOutput ().Значение кода ошибки определяется компонентом, но ошибка является фатальной, и конвейер перестал выполняться.Перед этим могут быть сообщения об ошибках с дополнительной информацией о сбое.
У меня нет других ошибок.
Когда я пытаюсь предварительно просмотреть результат из ExcelВ окне редактора исходного кода я получаю сетку данных с образцом данных, как и ожидалось.Когда есть недопустимые данные, отображается текст - это нормально.В других потоках данных возвращается значение «1899-12-30», и я могу делать с ним все, что захочу.
Я пытался явно определить тип данных для этого столбца как DT_DATE, ноЯ все еще получаю ошибку.Я сравнил всевозможные настройки свойств с другими потоками данных (которые не выдают эту ошибку), и все кажется одинаковым.Я также попытался изменить поведение обработки ошибок компонента «Источник Excel» на «Игнорировать сбой» вместо «Компонент сбой» - безрезультатно.
Следует отметить, что там нет возможных проблем с ресурсами.Я имею дело только с горсткой строк на каждом листе (максимум несколько десятков).
Я ожидаю, что компонент Excel Source вернет значение «1899-12-30», когда исходная ячейка содержитнедопустимое значение, а не сбой потока данных.
Спасибо, Дэвид