根据字段更改值设置标识列

时间:2015-03-21 09:49:01

标签: sql asp.net sql-server-2008 identity

我有一个表格,我使用identity作为主键(t_head_id),现在这个键变得非常长,这会扰乱客户端,因此我们将其更改为正常列选择max + 1并添加新身份列(id)和另一个计算(id_per_year)id_per_year = id +' - '年(opeartion_date)

现在我不想在一年开始时重置id但是当客户端开始插入operation_date的新值时,因为新的一年可以启动,但是客户端仍在插入记录过了一年

如何根据operation_date的变化值重置身份?

1 个答案:

答案 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亿年。 ..

MSDN Books Online

中详细了解它(包括所有选项)

那么 真的 是否需要更改ID列?如果您接近达到INT限制(我强烈怀疑......),那么请更改为BIGINT IDENTITY - 不要开始使用{{1}之类的内容这本身就是不安全的,而最终会在负载下破坏并产生重复值 - 保持自己的悲伤,坚持SELECT MAX() + 1

2.92百万年听起来像足够对你???