Sql server 只有3位的DT_db2

Sql server 只有3位的DT_db2,sql-server,ssis,rownum,Sql Server,Ssis,Rownum,我在SSIS派生的列转换和带有datetime2(7)的表列中使用了(DT_DBTIMESTAMP2,7)GETDATE()。 虽然我在这两个方面都设置了7位数的秒刻度,但似乎只有3位数。 例如,我期望像'2018-05-02 16:45:15.6192346',但它来了'2018-05-02 16:45:15.6190000 我需要millseconds的原因是,我想使用时间戳从任何副本中筛选出最新的记录。我意识到只有3位数的秒刻度对于这个pourpose是不够的 除了派生列转换和表列之外,S

我在SSIS派生的列转换和带有datetime2(7)的表列中使用了
(DT_DBTIMESTAMP2,7)GETDATE()。
虽然我在这两个方面都设置了7位数的秒刻度,但似乎只有3位数。
例如,我期望像'2018-05-02 16:45:15.6192346',但它来了'2018-05-02 16:45:15.6190000

我需要millseconds的原因是,我想使用时间戳从任何副本中筛选出最新的记录。我意识到只有3位数的秒刻度对于这个pourpose是不够的

除了派生列转换和表列之外,SSIS包中是否有任何Required设置?如有任何建议,将不胜感激

GETDATE()
返回一个
datetime
,您应该使用
SYSDATETIME()
。看

编辑


正如Larnu所指出的,您可能使用的是SSIS表达式,而不是我假设的sql表达式GETDATE。不过,这一点大致相同。GETDATE返回一个
DT_DBTIMESTAMP
,其中“小数秒的最大刻度为3位。”()

虽然这与Honeybacker所说的几乎相同,但我将进行一些扩展,因为OP没有在SQL Server中使用
GETDATE()
表达式。值
2018-05-02 16:45:15.619
无法通过
GETDATE()
(Transact-SQL)返回,因为它只精确到1/300秒(因此最后一个数字只能是0,3和7(技术上是0,333333~和666666666~,这就是为什么最后一个数字是7,因为它是四舍五入的)

在SSIS中,表达式返回的数据类型为
DB\u TIMESTAMP
。根据报告:

时间戳结构,由年、月、日、小时、分钟、, 秒和分数秒。分数秒有一个最大值 3位数的刻度


因此,最后4个字符丢失。不幸的是,我不相信SSIS中有一个函数可以将当前日期和时间返回到您需要的精度。因此,如果您需要这个高级别,您可能需要在SQL Server中使用一个这样的表达式,如Honeybacker推荐的表达式。

我认为OP使用的是SSIS表达式,而不是SQL Server表达式
(DT_DBTIMESTAMP2,7)GETDATE()
将不是有效的SQL Server语法。@Larnu,很好,我不知道有一个类似的SSIS表达式。编辑。拉穆和蜜獾,非常感谢您的及时和友好的答复。多亏了你,终于明白了为什么它有3个数字。不幸的是,SSIS似乎不支持sysdatetime(),因此我将尝试其他解决方案(如果遇到其他问题,可能会回来…)。非常感谢@Sachiko,SSIS GETDATE()返回DB_DBTIMESTAMP而不是DB_DBTIMESTAMP 2,因此它只有3位小数。如果您需要更高的精度,可以使用脚本转换来分配DateTime。现在分配到DB_DBTIMESTAMP2列。非常感谢您宝贵的建议,@Dan:)我将尝试通过任何脚本获得更高的精度。