为什么当某一列指定为Identity标示后,再对表插入记录时,指明为Identity那一列的数据是连贯的(按步长增长),而当删除某一条或几条记录后在对表插入数据时,指明为Identity那一列的数据就不连贯了?请问怎样做才能使数据连贯?
例如:
下表ID已指定为IDENTITY列,步长和起始值均为1
ID name sex age
1 张三 女 20
2 李四 男 30
3 王五 男 15
4 赵六 女 18
当我把第2条记录删除后在插入一条新记录时,会变成这样:
ID name sex age
1 张三 女 20
3 王五 男 15
4 赵六 女 18
5 黄七 男 24
问题就出现了,ID列变得不连续了,1和3之间没有了2
请问怎样做才能使新记录自动插入到2的位置并且ID值为2 ?这样看起来才连续
例如:
下表ID已指定为IDENTITY列,步长和起始值均为1
ID name sex age
1 张三 女 20
2 李四 男 30
3 王五 男 15
4 赵六 女 18
当我把第2条记录删除后在插入一条新记录时,会变成这样:
ID name sex age
1 张三 女 20
3 王五 男 15
4 赵六 女 18
5 黄七 男 24
问题就出现了,ID列变得不连续了,1和3之间没有了2
请问怎样做才能使新记录自动插入到2的位置并且ID值为2 ?这样看起来才连续
1、是不是连续是必要的,如果是必要的而且有可能删除记录,建议不要用Identity
2、可以考虑不是真的删除,而是逻辑删除,也就是说删除了还占用一个id
3、查找最小空号的方法:
select isnull((select id+1 from tablename a
where not exists (select 1 from tablename where id=a.id+1)
),1)