你能指定一个表的子序列吗?

时间:2015-02-24 18:04:53

标签: sql-server tsql sql-server-2012

我已经创建了一个项目历史记录表,我希望自动增加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

目前,VersionId设置在触发器中。我想要找到的是这样的(我知道这实际上不起作用):

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()
)

虽然我有一个可行的解决方案,但我想知道我是否缺少一些用于处理此案例的内置功能。<​​/ p>

1 个答案:

答案 0 :(得分:2)

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

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

对于ItemId的索引,Id应该非常快 可能比触发器更少的开销。

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