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

  • Ошибка проекта SSIS: не удалось получить информацию о таблице для диспетчера соединений «диспетчер соединений»,
  • SSIS Data Conversion - обновление нескольких строк
  • SSIS Загрузка только даты из листа Excel
  • Где можно найти ошибки отладки в моем пакете SSIS?
  • SSIS - загрузка Excel удаляет символ процента
  • Изменение листа Excel через C # без Interop.Excel
  • Обновить Excel с помощью задачи сценария SSIS
  • Цикл через файлы XLSM SSIS 2012
  • SSIS: Архивируйте несколько .xlsx после импорта на SQL Server
  • Пакет SSIS не обновляет измененную дату в Excel
  • Использование проекта служб Integration в приложении Windows Form или WPF?
  • Interesting Posts

    Не удается открыть сопоставленные рабочие книги после выбора даты

    VBA: организация объектов диаграммы на листе

    Замена диапазона соединений Excel с помощью надстройки

    VBA: Получить HTML-буфер обмена

    Вставка строк в Excel с помощью MATLAB

    В Excel, как я могу создать «пересечение» двух строк (без перехода в VB)?

    HTML, PHP – символы Escape '<' и '>', в то время как эхо

    Как создать формулу в заполнении диспетчера правил условного форматирования (зависит от того, к какой ячейке она применяется)

    Совпадение / изменение размера нового диапазона на основе выбора других листов

    VBA – Как связать приложение Outlook Outlook

    Открывается окно ввода в рабочей книге

    Создание информационных кадров с одного листа в пандах

    Автоматическое обновление меток данных на диаграмме Excel (Excel 2016)

    Использование объекта Range с NewEnum () вместо класса Collection (т. Е. Для каждого)

    Преобразование всех файлов Excel в папку в CSV с помощью VBScript

    Давайте будем гением компьютера.