你能为 table 指定一个子序列吗?

Can you specify a sub-sequence for a table?

我创建了一个项目历史记录 table,我想为其自动递增 VersionId 分区 ItemId

ID ItemId VersionId ItemContent 创建
1 1 1 fooo 2015-02-24 12:54:00.11
2 2 1 巴尔 2015-02-24 12:54:15.35
3 1 2 富 2015-02-24 12:55:00.61
4 1 3 baz 2015-02-24 12:55:45.23
5 2 2 栏 2015-02-24 12:56:00.03

目前,VersionId 是在触发器中设置的。我想找到的是这样的东西(我知道这实际上行不通):

创建table ItemHistory
(
     Id int identity(1,1) 非空主键
    ,ItemId int 非空引用 Item(Id)
    ,VersionId int not null <b>default row_number() over (partition by ItemId order by Id)</b>
    ,项目内容 varchar(最大)
    ,创建日期时间不为空默认getdate()
)

虽然我有一个可行的解决方案,但我想知道我是否缺少处理这种情况的一些内置功能。

如果您想使用我的评论作为答案

为什么不只用一个视图来做呢?您可以在视图中使用 row_number()。

有了ItemId的索引,Id应该很快了
开销可能比触发器少。

我看到你添加了一条只读评论。更有理由观看。