【发布时间】:2015-02-24 18:04:52
【问题描述】:
我已经创建了一个项目历史记录表,我想自动递增由ItemId 分区的VersionId。
ID ItemId VersionId ItemContent Created 1 1 1 富 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 巴兹 2015-02-24 12:55:45.23 5 2 2 酒吧 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()
)
虽然我有一个可行的解决方案,但我想知道我是否缺少一些用于处理这种情况的内置功能。
【问题讨论】:
-
那么您是说当您在表中写入一行时,您将指定 ItemId,并且您希望根据表中已有的行自动设置 VersionId?
-
@Elliveny 是的,没错。
-
我认为触发器就是这里的答案。我不知道更好的解决方案。对这个问题投赞成票,我很想看看是否有人提出任何建议!
-
为什么不直接用视图来做呢?您可以在视图中使用 row_number()。
-
@blam 是的。这可能是比使用触发器更好的选择。
标签: sql-server tsql sql-server-2012