DT_DBTIMESTAMP2, имеющий только 3 цифры - PullRequest
0 голосов
/ 02 мая 2018

У меня (DT_DBTIMESTAMP2,7)GETDATE() в столбце Преобразование производного столбца и таблицы служб SSIS с датой time2 (7). Несмотря на то, что я установил 7-значную вторую шкалу в обоих, но, кажется, это только 3 цифры. Например, я ожидал, как '2018-05-02 16: 45: 15.6192346' , но приходит '2018-05-02 16: 45: 15.6190000 '.

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

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Хотя это почти то же самое, что сказал HoneyBadger, я немного расширяюсь, так как в OP не используется выражение GETDATE() в SQL Server. Значение 2018-05-02 16:45:15.619 никогда не может быть возвращено GETDATE() (Transact-SQL), поскольку оно точно с точностью до 1/300 секунды (таким образом, последняя цифра может быть только каждые 0,3 и 7 (технически 0, 333333333 ~ и 666666666 ~, поэтому последняя цифра 7, так как она округлена в большую сторону)).

В SSIS выражение GETDATE() возвращает тип данных DB_TIMESTAMP. Согласно Документация :

Структура метки времени, которая состоит из года, месяца, дня, часа, минуты, секунда и доли секунды. Дробные секунды имеют максимум шкала из 3 цифр.

Таким образом, последние 4 символа теряются. К сожалению, я не верю, что в SSIS есть функция, которая возвращает текущую дату и время с необходимой вам точностью. Таким образом, если вам нужен этот высокий уровень, вам, вероятно, потребуется использовать выражение в SQL Server, например, SYSDATETIME(), которое рекомендовал HoneyBadger.

0 голосов
/ 02 мая 2018

GETDATE() возвращает datetime, вместо этого следует использовать SYSDATETIME(). См. документацию .

редактировать

Как отметил Ларну, вы, вероятно, используете выражение SSIS GETDATE , а не выражение sql GETDATE, как я и предполагал. Дело в том, что более или менее то же самое. GETDATE возвращает DT_DBTIMESTAMP, где «Дробные секунды имеют максимальную шкалу из 3 цифр». ( Источник ).

...