2010-02-09 2 views
1

Я использую SSIS для копирования данных из таблицы в Oracle в таблицу SQL Server 2005. Нет необходимости в преобразовании, поэтому это просто прямая линия, соединяющая Источник OLE DB для назначения OLE DB. Довольно просто и работает, но во время исполнения запись в таблице Oracle содержит значение временной метки года 0002 в встречах, поэтому ошибки SSIS из-за исключения oveflow.Работа с меткой времени/Datetime при копировании данных с Oracle на SQL Server с использованием SSIS

Если я создаю дополнительный столбец в SQL Server с типом данных строки и переназначить, то это работает нормально. Однако я предпочитаю хранить столбец Datatime и использовать его в моем пункте назначения. Я в порядке, заменив год 0002 чем-то вроде 1900 или что-то в этом роде. Итак, каков наилучший способ добиться этого, если-то-то в SSIS?

ответ

6

Обычно я много Oracle с этим, используя что-то вроде этого в моем исходном запросе:

CAST(Coalesce (
CASE 
WHEN TO_CHAR(Effective_Date,'yyyy-mm-dd HH24:MI:SS') < '1900-01-01 00:00:00' 
     THEN TO_DATE('9999-12-31 00:00:00','yyyy-mm-dd HH24:MI:SS') 
ELSE Effective_Date 
END ,TO_DATE('9999-12-31 00:00:00','yyyy-mm-dd HH24:MI:SS')) AS DATE) AS Effective_Date 

Это устанавливает действительный, но очень будущую дату (диктуемой компании я на контракте в качестве представления неверную дату в поле требуемой даты. Вы также можете использовать '1900-01-01 00:00:00' вместо '9999-12-31 00:00:00') в случаях, когда исходная дата null или менее 1900-01-01 00:00:00. Он также избегает последующей обработки SSIS в поле даты.

+0

Очень хорошее предложение, и оно прекрасно работает. Спасибо –

+0

Почему вы также сопоставляете NULL с '99991231'? Есть ли что-то в ситуации, которая требует этого или была только частью ваших собственных требований? – ErikE

+0

@emtucifor Это было требование от бизнеса, они хотели использовать 99991231 в качестве маркера invaild/unknown, так что было бы легко отфильтровать эти значения из отчетов. –

2

Я понимаю, что у вас есть исправление, которое вы хотели, но другой метод решения таких проблем - использование условного разделения. Вы можете находить и обрабатывать всевозможные проблемы с данными, в которых вы хотите удалить записи из основного потока и выполнять определенную обработку с помощью условного разделения. Мне это особенно удобно, когда я хочу рассказать поставщику о плохих записях, которые они нам отправили, чтобы они могли исправить свои данные.

Смежные вопросы