我在SSIS派生列转换中使用(DT_DBTIMESTAMP2,7)GETDATE()
,在datetime2(7)中使用表列。
虽然我在两者中都设置了7位数秒,但似乎只有3位数。
例如,我期望像' 2018-05-02 16:45:15.6192346' 但它来自' 2018-05-02 16:45: 15.6190000 '
我之所以需要毫秒,我想要使用时间戳来解决任何重复的最新记录。我意识到只有3位二次刻度才足以满足这种需求。
除派生列转换和表列外,SSIS包中是否有任何需要的设置?任何建议将不胜感激。
答案 0 :(得分:1)
GETDATE()
返回datetime
,您应该使用SYSDATETIME()
代替DT_DBTIMESTAMP
。请参阅documentation。
修改强>
如Larnu所述,您可能正在使用SSIS表达式GETDATE,而不是我假设的sql表达式GETDATE。尽管如此,这一点大致相同。 GETDATE返回{{1}},其中"小数秒的最大比例为3位数。" (Source)。
答案 1 :(得分:1)
尽管这与HoneyBadger所说的几乎相同,但由于OP未使用SQL Server中的GETDATE()
表达式,因此我稍微扩展了一点。 2018-05-02 16:45:15.619
(Transact-SQL)永远不会返回值GETDATE()
,因为它只能精确到1/300秒(因此最后的数字只能是0,3,和7(技术上为0,3333333333~和666666666~,这就是为什么最后的数字是7,因为它被四舍五入))。
在SSIS中,GETDATE()
表达式返回DB_TIMESTAMP
的数据类型。根据{{3}}:
时间戳结构,包括年,月,日,小时,分钟, 秒,小数秒。小数秒有一个最大值 3位数。
因此,最后4个字符丢失。遗憾的是,我不相信SSIS中有一项功能会将当前日期和时间返回到您所需的准确度。因此,如果您需要这个高级别,您可能需要在SQL Server中使用表达式,例如HoneyBadger建议的Documentation。