我有一个表格,我使用identity
作为主键(t_head_id),现在这个键变得非常长,这会扰乱客户端,因此我们将其更改为正常列选择max + 1并添加新身份列(id
)和另一个计算(id_per_year
)id_per_year = id +' - '年(opeartion_date)
现在我不想在一年开始时重置id但是当客户端开始插入operation_date
的新值时,因为新的一年可以启动,但是客户端仍在插入记录过了一年
如何根据operation_date的变化值重置身份?
答案 0 :(得分:0)
您使用INT
属性定义SMALLINT, TINYINT, BIGINT
(或IDENTITY
)类型的列:
CREATE TABLE dbo.YourTable( ID INT IDENTITY(1,1) ......
使用此设置,当将行插入表中时,SQL Server将自动为您的表生成连续的ID。
类型为INT
,从1开始,您可以获得超过20亿的行 - 这对于绝大多数情况来说应该足够了。使用BIGINT
,您可以获得大约 922千兆(922,包含15个零 - 9' 220&#39,000亿) - 足够你?
如果您从1开始使用INT IDENTITY
,并且每秒插入一行,则在达到20亿限制之前需要66.5 年 ....
如果您从1开始使用BIGINT IDENTITY
,并且每秒插入一千行,那么在达到922千万亿次限制之前,您需要一个令人难以置信的 2.92亿年。 ..
那么 真的 是否需要更改ID
列?如果您接近达到INT
限制(我强烈怀疑......),那么请更改为BIGINT IDENTITY
- 不要开始使用{{1}之类的内容这本身就是不安全的,而最终会在负载下破坏并产生重复值 - 保持自己的悲伤,坚持SELECT MAX() + 1
!
2.92百万年听起来像足够对你???