SSIS getdate в столбец DateTimeOffset - значение данных переполняет тип

У меня есть пакет SSIS. Источником является SQL-запрос. Цель — стол. Пакет работал до тех пор, пока я не изменил столбец в таблице назначения с datetime на datetimeoffset(0).

Теперь все записи терпят неудачу с ошибкой «Преобразование не удалось, поскольку значение данных переполняет тип, используемый поставщиком» в этом конкретном столбце.

Значение в исходном запросе — getdate(). Я пробовал TODATETIMEOFFSET(getdate(),'-05:00') безуспешно.

На самом деле, единственное, что пока сработало, — это жестко запрограммировать в исходный запрос следующее:

cast('3/14/12' as datetime)

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


person Mayo    schedule 14.03.2012    source источник
comment
У меня была похожая проблема, и я обнаружил, что мне помогли перечисленные здесь действия: social.msdn.microsoft.com/Forums/en/sqlintegrationservices/. Я сделал явный формат для использования в производном столбце. Больно делать, но похоже, что в SSIS происходят некоторые странные вещи с элементами dateTime.   -  person wergeld    schedule 14.03.2012
comment
Каков тип данных столбца в потоке данных? Щелкните правой кнопкой мыши путь из исходного запроса и выберите «Метаданные».   -  person billinkc    schedule 14.03.2012


Ответы (2)


Я собирался предложить добавить «компонент преобразования данных», чтобы справиться с этим, но, поскольку вы изменили только пункт назначения, это означает, что вы можете изменить исходный запрос, чтобы он выполнял:

select cast(YOUR_DATE_COLUMN as datetimeoffset(0))
person Diego    schedule 14.03.2012
comment
В итоге мы остановились на этом. Я обнаружил, что точность источника была слишком высокой с getdate() - если я жестко запрограммировал значение с миллисекундами, это тоже не удалось. Все еще не уверен, почему старый метод работал на одном сервере, а не на другом, но явное приведение его к datetimeoffset(0) сработало. - person Mayo; 14.03.2012

На случай, если кто-то еще ищет, мы нашли альтернативное решение, которое работает, если источник находится в SQL 2005 (без поддержки datetimeoffset).

select dateAdd(minute,datediff(minute,0,getutcdate()),0)

Цель состоит в том, чтобы уменьшить точность. Конечно, я также теряю секунды, но если я попробую указанную выше строку с секундами, я получу ошибку переполнения.

person Mayo    schedule 27.03.2012