【问题标题】:A date time field precise enough to differentiate between rows on bulk/mass insert足够精确的日期时间字段以区分批量/批量插入的行
【发布时间】:2018-05-26 20:20:51
【问题描述】:

我正在使用 SSIS 将 500 到 3+ 百万行插入到各种表中。数据源是从平面 CSV 文件到另一个数据库(Oracle、MySQL、SQL Server)的任何内容。

我正在尝试创建一个“inserted_on”列,该列显示添加行的日期/时间戳,我需要它足够精确以区分上一行和下一行。换句话说,每一行都应该有不同的日期时间值,即使它真的很接近。

我尝试了一个默认值为(gettime())datetime2(7) 字段,但这似乎不够精确。

【问题讨论】:

  • 我认为如果你想保证你知道插入的顺序,你应该使用某种不断增长的 ID 字段来表示行插入,而不是依赖时间。正如您似乎已经注意到的,datetime2 的最大精度不一定是唯一的。
  • 使用 SYSDATETIME() 而不是 GETDATE() 以获得亚毫秒级精度。然而。你可能仍然需要一个增量值来打破关系。

标签: sql sql-server datetime ssis sql-server-2014


【解决方案1】:

in this answer 所述,您应该使用timestamp

请参阅documentation here 或其他详细信息available here

希望对您有所帮助。

【讨论】:

  • 注意:在 SQL Server 中,CURRENT_TIMESTAMP 的数据类型为 DATETIME,与 TIMESTAMP 无关(相当于 ROWVERSION,与实际时间戳无关) . ROWVERSION 上的文档还指出,TIMESTAMP 将被弃用,因为它的价值。
  • 感谢@ZLK 的更新。赞赏!由于我在 SSIS 导入中广泛使用此消息,因此已弃用的消息令我感到震惊。
  • 所以现在我想知道我应该使用不断增长的 ID 还是 timestamp/rowversion
  • 这是一个基于案例的判断电话。我们使用timestamp 没有任何麻烦,每天提取的数据有数十万笔交易。顺序很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2020-12-13
  • 1970-01-01
  • 2023-04-09
  • 2011-10-22
相关资源
最近更新 更多