SSIS Ошибка импорта даты Excel (ошибка усечения)

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

Задний план:

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

Этот пакет работал раньше. Тем не менее, он теперь терпит неудачу из-за усечения данных для столбца даты. Столбец 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, это всегда боль для меня.

Если вы можете отформатировать файл 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

  • Не может быть Excel и SSDT на одном компьютере
  • Отображение динамических столбцов SSIS в таблице Excel Source и Destination SQL Server
  • Как импортировать / загружать защищенные паролем книги Excel в таблицы с использованием SSIS?
  • Ошибка преобразования данных в пакет SSIS - текст в GUID
  • Импортировать данные из SQL в Excel, чтобы получить ошибку, что делать?
  • Как автоматически генерировать имена столбцов в диспетчере подключений SSIS
  • Ошибка проверки пакета: 0xC020801C excel connection
  • Ошибка подключения Excel в SSIS
  • Импорт SQL Server 2005 из Excel
  • Экспорт SQL Server в Excel 2010 больше 255 символов
  • Соединение SSIS Excel работает из-за отказа приложения из развернутой службы
  • Interesting Posts
    Давайте будем гением компьютера.