可恶的自增长标识符
自增长标识符引起的问题:
这个问题主要遇到的情形是,在删除了一段连续的带有自增长字段的一部分数据项之后,自增长序列不会自动补全,而是按照原先的计数继续增长。举个例一段连续的自增长字段(1,2,3,…,8,9),我们将其中的(7,8,9)delete掉后再向其中插入新的数据,此时新序列标号不是7而是10。
解决的方法有两种:
(1)设置序列自增长开关
取消序列的自增长的SQL语句:
set identity_insert [表名] on
这条语句执行完后,再进行插入时需要指定插入项的序列值,而不会引起序列的自增长。当修改完成后,如果还想让序列具有自增长性需要进行恢复操作:
set identity_insert [表名] off
(2)重置序列自增长起始数
dbcc checkident([表名],RESEED,[数字])
该语句可用来重置自增长序列的起始值,[数字]处设置起始值。
dbcc checkident([表名],NORESEED)
该语句可用来查询目前自增序列的当前值