【问题标题】:Adding a rowversion column to a table and ordering existing data向表中添加 rowversion 列并对现有数据进行排序
【发布时间】:2020-03-02 23:00:21
【问题描述】:

我想在我的数据库中的现有表中添加一个 rowversion 列,这样我基本上可以按最后一次成功修改每条记录的时间进行排序。我的问题是,添加 rowversion 将如何影响我现有的数据?是否会在这些记录上随机分配 rowversion 值,或者最后一次修改它们? (即使它们在列之前存在)

【问题讨论】:

  • 根据定义,表中的行是无序的。但你为什么需要问?只需创建一个小测试表并自己执行此操作。您是否期望分配的值以某种方式与您的 的想法相匹配?
  • 我只是想知道是否有元数据来表示 SQL Server 将映射到 rowversion 列的每一行的最后修改时间?或者是否可以播种 rowversion 列以根据另一列 asc/desc 分配历史值?
  • 这里还有一个挑战 - 无法添加可为空的 rowversion 列。我试过了,即使语法表明你可以,它仍然对表执行数据大小操作。但是,如果您想要 date_modified 或类似的列,请将其添加为各种日期时间数据类型之一,并在表上放置触发器以保持正确。
  • 简短回答 - 不。引擎将分配值 - 您无法控制该分配。
  • 对于现有数据,分配基本上是随机的?

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


【解决方案1】:

我的问题是,添加 rowversion 将如何影响我现有的数据?

你可以测试一下。

例如

drop table if exists t
go
create table t(id int primary key)
insert into t(id) values (1),(2),(3)
go
alter table t add rv rowversion

go
insert into t(id) values (4)

insert into t(id) values (5),(6)

go
select * from t

输出

(3 rows affected)

(1 row affected)

(2 rows affected)
id          rv
----------- ------------------
1           0x00000000000007DD
2           0x00000000000007DE
3           0x00000000000007DF
4           0x00000000000007E0
5           0x00000000000007E1
6           0x00000000000007E2

(6 rows affected)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2012-06-07
    • 2016-02-16
    • 2021-12-17
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多