首页 新闻 会员 周边

怎么才能保证自增ID的连续性呢?

0
悬赏园豆:5 [已解决问题] 解决于 2012-05-14 09:47

Sqlserver怎么才能保证把自增id删除过记录的自增id重新用在新插入的记录呢。

比如自增id为12345的5行记录删除了第五行再insert一行新增的id就是6了能不能让他还是5呢

以前好像听说自增id的计数被保存在一个系统表里~~是哪个表有人知道么~能不能执行del的写个触发器重置下哪个自增id的记录数据呢。。。

分不太多久放了5分~~~谢谢了

Nature Q的主页 Nature Q | 菜鸟二级 | 园豆:342
提问于:2012-05-08 21:13
< >
分享
最佳答案
0

如果你是要删除所有的数据后  新增数据时自增列重置。。。你可以用  TRUNCATE TABLE  表名。

其他的我就不知道了。。。

我也是新手。。祝你早日解决问题。。

收获园豆:5
小菜... | 菜鸟二级 |园豆:211 | 2012-05-10 17:34
其他回答(6)
1

DBCC CHECKIDENT ("表名", RESEED, 1);
GO

小材小用 | 园豆:639 (小虾三级) | 2012-05-08 21:36
0

 说真的,我也是有过这样的想法,但这是一个不切实际的。

假如这个自增ID只是自增ID,那么没有什么问题,但是,假如这个自增ID还是另外一个表的外键呢?此时,再使用楼上的方案重置自增ID的后果将是很严重的。

无之无 | 园豆:5095 (大侠五级) | 2012-05-08 22:01
0

微软的建议,在生产环境中严禁这样做。

邀月 | 园豆:25475 (高人七级) | 2012-05-09 10:52
0

数据库设ID列计为不自增,插入用事务包含起来,基本流程:

1、select max(id)=临时变量  得到当前最大的id。

2、insert(注意,id+1)

3、再次 select max(id),判断得到值是否为 临时变量+1.

 

如上步骤如有任意一步错误,则回滚整个事务。

 

注意:生产环境请慎重考虑,最好不要使用,这样做效果不高,且连续的ID,除了“漂亮”一点外,没有其他的好处,ID的作用就是数据的身份证,只要编号不重复,是不是连续的无所谓的,没必要为了“好看”,降低系统性能。大数据量的时候,select max(id)很耗时的。

快乐鸟 | 园豆:7 (初学一级) | 2012-05-09 23:40
0

Set identity_insert table_name on
Insert into yourtable(id,xxx) values(5,XXX)
Set identity_insert table_name off

Jeremy Liu | 园豆:705 (小虾三级) | 2012-05-10 09:59
0

不要用自增的主键,改用触发器来创建主键。

WWRR | 园豆:215 (菜鸟二级) | 2012-06-14 22:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册