SSIS Ошибка импорта даты Excel (ошибка усечения)
Я сожалею о том, что кажется очень простой проблемой, но я не могу найти ответ, и я трачу дни (а не только часы на этом этапе). Я довольно новичок в SSIS, и это просто ударяет меня по спине.
Задний план:
Довольно простой пакет SSIS для импорта листа Excel в промежуточную таблицу в SQL Server. Поскольку я не хочу вводить в заблуждение кого-либо, используя неправильную номенклатуру, я буду ссылаться на источник Excel как Excel и таблицу SQL Server в качестве целевой таблицы.
- Ошибка источника SSIS Excel: ] Ошибка: код ошибки SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80004005
- Ошибка файла SSIS Excel - файл создания сбоя
- Ошибка отладки SSIS (источник excel, преобразование данных, назначение OLE DB)
- Мастер импорта / экспорта данных SQL Server и DTExec для дат Excel
- Как я могу удалить вставки столбцов столбцов столбцов при экспорте в файл Excel?
Этот пакет работал раньше. Тем не менее, он теперь терпит неудачу из-за усечения данных для столбца даты. Столбец Excel был отформатирован как DATE (и я попробовал несколько разных параметров формата в DATE). Целевой столбец также является столбцом DATE (NOT datetime). Данные в Excel являются преимущественно пустыми ячейками с несколькими эпизодическими значениями. Я думаю, что ошибки начались, когда даты начали появляться в данных (а не просто пробелы).
Я попытался использовать расширенный редактор для обеих сторон (Excel и Target) и попробовал множество настроек типа данных, но я все равно получаю тот же самый отказ. Я подозреваю, что теперь он довольно перепутался с различными тестами, которые я сделал.
Я также попытался добавить преобразование преобразования данных для поля Date «date [DT_DATE]» – это не сработало. И я попытался создать Derived Column – сначала на основе столбца Excel, а затем в столбце Transformed. Все эти попытки потерпели неудачу.
Вопросов:
1) Какова наилучшая практика импорта данных Excel в SQL Server для столбцов DATE?
2) Поскольку это два очень зрелых Microsoft Apps (Excel и SQL Server), работающих вместе, кажется, что это должно быть просто. Это заставляет меня думать, что я, должно быть, упускаю некоторые основные понятия здесь. Может ли кто-нибудь настроить меня прямо?
3) Как вы все получаете дату Excel в SQL Server?
4) Каков трюк для синхронизации столбцов после внесения изменений?
Спасибо за любые идеи, которые вы можете предоставить. Извините, что беспокою вас всех с тем, что кажется довольно простым.
Дэвид
- Необходимо добавить файл excel в SSIS
- Как экспортировать столбцы varchar (max) из таблицы в Excel 2007 в SSIS
- Источник SSIS Excel, импортирующий отдельные столбцы даты в разных форматах
- Файл Excel в куб SSAS
- SQL-сервер заменяет пустые ячейки значением NULL
- Пакет SSIS Слушайте случайно на этапе выполнения
- Почему SSIS сохраняет последнюю строку как NULL при передаче данных из Excel в CSV?
- Массовая загрузка миллионов записей в БД из листа Excel
Лично я не думаю, что есть лучшая практика для дат excel, это всегда боль для меня.
Если вы можете отформатировать файл excel, попробуйте изменить его на «Текст». он будет импортироваться как Unicode, а не дата. Если нет, попробуйте преобразовать столбец в задачу «Преобразование данных» в Unicode
после этого вам нужно будет использовать задачу «Производный столбец». Создайте дату в нужном формате.
пример для источника MM/dd/yyyy hh:mm:ss
Постройте, чтобы быть yyyy-MM-dd
SUBSTRING(datecolumn,7,4)+ "-" + SUBSTRING(datecolumn,1,2)+ "-" +SUBSTRING(datecolumn,4,2)
Может быть грубо, но экономит мое здравомыслие.
Если дата выглядит примерно как m/d/yyyy
не включая 2 значения, когда Jan или что-то еще, вы добавите несколько вещей, подобных этому для части месяца.
RIGHT("0" + SUBSTRING(datecolumn,1,FINDSTRING(datecolumn,"/"1)-1),2)
Удачи
Основная проблема при импорте данных из таблиц excel заключается в том, что excel состоит в том, что каждый столбец excel может иметь несколько типов данных или форматов, поэтому один и тот же столбец может содержать даты и номера, а также текст или даты с разным форматом (некоторые форматы не могут быть преобразованы неявно даты в SSIS).
Если все значения даты хранятся как дата (не текст), наилучшей практикой импорта дат с листа Excel является преобразование DATE
в формат номера "0.000000000"
(в Excel это Serial DateTime ) из excel или программно с использованием библиотеки, например Microsoft.Office.Interop.Excel
Вы можете ссылаться на эту ссылку, но используйте следующее:
xlCells.NumberFormat = "0.0000000"
Затем в пакете SSIS используйте компонент скрипта, чтобы преобразовать его снова в Date с помощью функции DateTime.FromOADate ()
* Предполагая, что inColumn
является столбцом Date с числовым типом, добавьте выходной столбец outColumn
типа DT_DBTIMESTAMP
или DT_DATE
и используйте следующий код:
If Not Row.inColumn_IsNull Then Row.OutColumn = DateTime.FromOADate(CDbl(Row.inColumn)) Else Row.OutColumn_IsNull = True End If
Примечание. При преобразовании столбца в формат номера вы игнорируете все форматы, но все еще имеете значение даты
-
Чтобы узнать больше о DateTimes в Excel, вы можете обратиться к этой ссылке
-
Чтобы узнать больше о форматах времени по времени, которые могут быть неявно преобразованы в дату в SSIS, следуйте в формате SSIS Source Format Implicit Conversion for Datetime