3

与我之前关于没有临时漏洞的序列(保证读者可见的数字始终在增加)的问题相关,请在此处输入链接描述,我想问一下我设计的解决方案是否有意义。

我创建了一个带有rowversion列的表。如果我正确理解这一点,SQL Server 保证这些值将始终递增。因为这只是一堆字节,所以像WHERE RowVer > 1567这样的查询需要强制转换,因此会导致表扫描。

所以我创建了一个可以进行强制转换的索引视图,我正在查询该视图。从表面上看,它可以工作(查询计划显示索引搜索),但我不确定如果我通过索引,始终递增的保证是否仍然适用。请帮忙。

编辑
它在调试时似乎工作正常,但插入到我的表中会阻止任何针对它的选择。需要调查持有什么样的锁。

4

1 回答 1

5

不,这没有意义

rowversion/timestamp数据库唯一的,而不是表唯一的。并且它会被 UPDATE 更改为行,而不仅仅是 INSERT。因此,这并不是您想要的严格单调递增。

请注意,不保证该数字以任何特定值开始

编辑,什么是“数据库唯一”?

MSDN 说对于 rowversion(时间戳)

每个数据库都有一个计数器,对于在数据库中包含 rowversion 列的表执行的每个插入或更新操作,该计数器都会递增。这个计数器是数据库行版本

当前值在@@DBTS

于 2013-05-13T11:55:23.383 回答