【问题标题】:SQL server ROWVERSION definition is not accurate?SQL server ROWVERSION 定义不准确?
【发布时间】:2012-11-20 20:59:08
【问题描述】:

来自msdn

每个数据库都有一个计数器,每次插入或 对包含 的表执行的更新操作 数据库中的 rowversion 列

还有

要返回数据库的当前行版本值,请使用@@DBTS。

我有一个数据库(相信我它只有一个表,没有时间戳/行版本字段)

但是当我运行 select @@DBTS 时,我得到的结果是 如果我有一个 rowversion 列:

(p.s. - 插入/更新 - 不更新此值)。

  • 这个值是多少?

  • 为什么我没有 rowversion 列?

【问题讨论】:

  • 它不会更新,因为数据库中没有时间戳字段会影响上次使用的时间戳。如果您添加时间戳值进行跟踪,不确定它的初始值可能只是开始?
  • @matthewnreid 我知道,在我写作的时候,我从来没有这样的专栏。尝试在你的数据库中运行这个命令(你知道它从来没有这个专栏)
  • 完全相同的值 0x00000000000007D0。想知道它是否是一种不存在而不是零的指标。
  • 也许是主表? ,但定义仍然是在数据库中包含 rowversion 列的表上。
  • msdn.microsoft.com/en-us/library/ms182776.aspx 这似乎在示例 7D3 中使用了一个非常相似的值作为增量。如果您选择添加 rowversion 列,我会假设它出于某种原因需要初始值,但我没有找到明确的答案。这很有趣。

标签: sql-server sql-server-2008 rowversion


【解决方案1】:

这个值是多少?

这是用于实现rowversion列的数据库中计数器的值。

为什么我没有 rowversion 列?

您引用的文档说每个数据库都有这样的计数器。它然后声明它将通过对包含rowversion 列的表的操作来递增。

并不是说这个计数器的存在取决于你的数据库中有没有这样的表。


解析为:

A) 每个数据库都有一个计数器

B) 递增

C) 对于执行的每个插入或更新操作

D) 在桌子上

E) 包含 rowversion 列

F) 在数据库中。

(E) 和 (F) 是适用于 (D) 的条件。 (C) 表示 (D) 上的哪些操作导致 (B) 发生。 (B-F) 中的任何一个都不会影响 (A) 的真假。


也没有文档(我可以找到)表明它应该从 0x0000000000000000 或任何其他值开始。鉴于此列的唯一目的是允许确定排序(X 发生在 Y 之后或 Y 之前),因此返回的实际值是什么并不重要。

【讨论】:

  • 因为这个值表示一个插入/更新的行,当我创建一个新的数据库时 - 它应该是 0。
  • 另外,根据定义,如果我没有任何相关列,我应该得到任何值(看粗体第一句)
  • @RoyiNamir - 你的第三条评论,不。正如我所说,文档表明该计数器存在。它然后告诉你它是如何递增的。正如我在第三段中所说,它并不表示此计数器的存在取决于数据库中任何 rowversion 列的存在。
  • @RoyiNamir - 对于您的其他 cmets,我希望它的值等于 model 数据库中计数器的值,因为这是任何新创建数据库的基础。跨度>
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 2020-06-12
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多