Импорт пустых полей даты FoxPro в SQL Server 2005 - PullRequest
0 голосов
/ 07 апреля 2011

Я нахожусь в процессе миграции системы на основе FoxPro в базу данных SQL Server 2005. В системе FoxPro поля даты без значений отображаются как '/ /'. Когда я использую мастер импорта / экспорта SQL Server, эти пустые поля даты переводятся в '12/30/1899 12:00:00 AM' в результирующей таблице SQL Server.

Мой вопрос таков: как проще всего SQL Server преобразовать эти пустые поля даты в NULL, а не в дату 1899 года? Мне не повезло копаться в мастере импорта / экспорта, и у меня нет достаточного опыта работы с пакетами служб SSIS, чтобы узнать, подойдет ли что-нибудь на этом пути для моих нужд.

Я буду импортировать несколько таблиц в разное время, поэтому чем проще и повторяемее решение, тем лучше. Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Несмотря на то, что я ценю оба предложенных предложения, в итоге я нашел больше решения «все готово», а не выполнял запрос к каждой таблице после их импорта.

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

Например, в редакторе преобразования производного столбца, если у меня был столбец даты с именем comp_date, и я могу с уверенностью сказать, что любойдата до 1910 года недействительна, мои первые несколько столбцов в редакторе выглядят примерно так:

Derived Column Name     Derived Column        Expression
-------------------     --------------        -----------------------------------------
comp_date               Replace 'comp_date'   DATEPART("year",comp_date) < 1910 ? NULL(DT_DATE):comp_date

Таким образом, мне нужно учитывать нулевое преобразование только один раз, когда я настраиваю его в пакете, затемпостоянно добавляйте в пакет по мере того, как все больше столов добавляется в смесь.Это дает мне именно те результаты, которые мне нужны.Еще раз спасибо за предложения!

0 голосов
/ 13 апреля 2011

Если в столбце никогда не следует ожидать значения 1899-12-30T00: 00: 00, вы можете обновить значение после вставки.

update YourTable
set DateColumn = null
where DateColumn = '1899-12-30T00:00:00'
0 голосов
/ 13 апреля 2011

Я бы оставил их как дату 1899 года и считал бы их пустой датой в вашем коде. Обычно это лучший подход, чем фаффинг со вставкой нулевых дат.

...