我创建了一个商品历史记录表,我想为其自动增加按VersionId分区的ItemId

ID        ItemId        VersionId        ItemContent        Created
1         1             1                fooo               2015-02-24 12:54:00.11
2         2             1                barr               2015-02-24 12:54:15.35
3         1             2                foo                2015-02-24 12:55:00.61
4         1             3                baz                2015-02-24 12:55:45.23
5         2             2                bar                2015-02-24 12:56:00.03

Currently, that VersionId is set in a trigger. What I would like to find is something like this (I know this doesn't actually work):

create table ItemHistory
(
     Id int identity(1,1) not null primary key
    ,ItemId int not null references Item(Id)
    ,VersionId int not null default row_number() over (partition by ItemId order by Id)
    ,ItemContent varchar(max)
    ,Created datetime not null default getdate()
)

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

最佳答案

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

为什么不随便看风景呢?您可以在 View 中使用row_number()。

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

我看到您添加了只读评论。提出更多理由。

关于sql-server - 您可以为表格指定子序列吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28703052/

10-15 16:00