你能为 table 指定一个子序列吗?
Can you specify a sub-sequence for a table?
我创建了一个项目历史记录 table,我想为其自动递增 VersionId
分区 ItemId
。
ID ItemId VersionId ItemContent 创建
1 1 1 fooo 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 baz 2015-02-24 12:55:45.23
5 2 2 栏 2015-02-24 12:56:00.03
目前,VersionId
是在触发器中设置的。我想找到的是这样的东西(我知道这实际上行不通):
创建table ItemHistory
(
Id int identity(1,1) 非空主键
,ItemId int 非空引用 Item(Id)
,VersionId int not null <b>default row_number() over (partition by ItemId order by Id)</b>
,项目内容 varchar(最大)
,创建日期时间不为空默认getdate()
)
虽然我有一个可行的解决方案,但我想知道我是否缺少处理这种情况的一些内置功能。
如果您想使用我的评论作为答案
为什么不只用一个视图来做呢?您可以在视图中使用 row_number()。
有了ItemId的索引,Id应该很快了
开销可能比触发器少。
我看到你添加了一条只读评论。更有理由观看。
我创建了一个项目历史记录 table,我想为其自动递增 VersionId
分区 ItemId
。
ID ItemId VersionId ItemContent 创建 1 1 1 fooo 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 baz 2015-02-24 12:55:45.23 5 2 2 栏 2015-02-24 12:56:00.03
目前,VersionId
是在触发器中设置的。我想找到的是这样的东西(我知道这实际上行不通):
创建table ItemHistory
(
Id int identity(1,1) 非空主键
,ItemId int 非空引用 Item(Id)
,VersionId int not null <b>default row_number() over (partition by ItemId order by Id)</b>
,项目内容 varchar(最大)
,创建日期时间不为空默认getdate()
)
虽然我有一个可行的解决方案,但我想知道我是否缺少处理这种情况的一些内置功能。
如果您想使用我的评论作为答案
为什么不只用一个视图来做呢?您可以在视图中使用 row_number()。
有了ItemId的索引,Id应该很快了
开销可能比触发器少。
我看到你添加了一条只读评论。更有理由观看。