我创建了一个项目历史记录表,我希望自动递增按 ItemId
分区的 VersionId
。
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 <b>default row_number() over (partition by ItemId order by Id)</b>
,ItemContent varchar(max)
,Created datetime not null default getdate()
)
虽然我有一个可行的解决方案,但我想知道我是否缺少一些处理这种情况的内置功能。</p>
最佳答案
如果您想使用我的评论作为答案
为什么不直接用 View 来做呢?您可以在 View 中使用 row_number() 。
有了 ItemId 的索引,Id 应该会非常快。
可能比触发器更少的开销。
我看到您添加了一条只读评论。更多观看理由。
关于sql-server - 您可以为表指定一个子序列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28703052/