【问题标题】:SQL Server vector clockSQL Server 矢量时钟
【发布时间】:2018-11-24 16:48:51
【问题描述】:

SQL Server 中是否有一个全局序列号保证定期递增(即使系统时间倒退),并且可以作为插入或更新操作的一部分访问?

【问题讨论】:

  • 对于特定表,IDENTITY PROPERTY,否则我会查看GUID,即使它不是顺序增量。你能解释一下用例吗?您能否定义定期增量并解释系统时间何时会倒退?
  • 我很确定rowversion 数据类型将始终是全局唯一的。如果您需要该属性,那么您可能需要考虑它。
  • 我希望能够定期查询一个或多个表,只选择更改的记录(我无权访问原始事务日志,因为这是在 SQL Azure 中)。由于数据的性质,我无法接受由于时间调整而丢失记录的边缘情况,因此(我假设)不能使用 DATETIME2“UtcLastUpdated”列。
  • 啊,那么我会研究 row_versioning 或以老派的方式进行而不是编辑记录,而是插入具有“插入”时间的新记录,以便您可以跟踪更改。

标签: sql-server time vector-clock


【解决方案1】:

是的,rowversion 数据类型和@@dbts 函数正是您要寻找的。

这种使用行版本标记行的模式由Change Tracking 功能在较低级别实现。它添加了对插入/更新和删除的跟踪,并且不需要您向表中添加列。

【讨论】:

    【解决方案2】:

    我很确定 ROWVERSION 可以满足您的需求。保证 ROWVERSION 类型的列在任何单个数据库中都是唯一的,并且根据 SQL 文档,它只不过是一个递增的数字。如果您每次完成数据更新后只保存 MAX(ROWVERSION),则可以通过查找大于保存的 MAX() 的 fo0r ROWVERSION,在下一次更新过程中找到更新或插入的行。请注意,您无法以这种方式捕获删除!

    另一种方法是使用 LineageId 和触发器。如果有帮助,我很乐意解释这种方法,但我认为 ROWVERSION 是一个更简单的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2014-02-17
      • 2012-11-13
      • 2021-12-06
      • 2022-11-29
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多