我创建了一个商品历史记录表,我想为其自动增加按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/