关于SQL中自动增长列值回复(还原)的问题

 大家都知道,只要有新加记录,SQL中自动增长字段的值总是自动累加的(假设是加1),即使这条记录后来被删除了,但这个值照样已经“被使用过了”。

举例说,当前表中这个自增长字段最大值是10,后来插入了两条记录,这个字段值就先后变成了11,12.再后将11、12这两条记录删除了,但以后再插入记 录时,这个字段值会变成13,而不会是11.因此,我在想,在数据库中,一定有个地方存储这个自增长字段已经增长到哪个量了,如果找到这个地方,并将记录 的这个量改回(比如改回10),那么中间就不会有空白了。

那么,这个地方到底在哪呢?能不能改呢?

 

即:

SET IDENTITY_INSERT 表 ON
--再插入之前删除的值
SET IDENTITY_INSERT 表 OFF

 

eg:

create table tb(id int identity ( 1 , 1 ),name varchar ( 10 ))

insert into tb(name) select ' abc '

insert into tb(name) select ' sfd '

insert into tb(name) select ' efawe '

insert into tb(name) select ' asdf2 '

insert into tb(name) select ' efw '

insert into tb(name) select ' afsd '

insert into tb(name) select ' asdf2 '

insert into tb(name) select ' 2fsf '

insert into tb(name) select ' cawe '

insert into tb(name) select ' sdf2qe '

go

select * from tb

delete from tb where id = 9 or id = 10

select * from tb

go

SET IDENTITY_INSERT tb ON

insert into tb(id,name) select 9 , ' u2478f '

insert into tb(id,name) select 10 , ' nv9oawe '

insert into tb(id,name) select 11 , ' adfunsdf '

insert into tb(id,name) select 12 , ' vno9af '

SET IDENTITY_INSERT tb OFF

-- 下面用新的标识值,当插入值大于原标识值时,自动更改标识,但不能向下改,如果你要向下改,只能不用标识,如上面所示.

insert into tb(name) select ' 3awef '

insert into tb(name) select ' faerq3 '

select * from tb

go

drop table tb

 

同时可以用以下命令查看自增长字段的值:

                    dbcc checkident (表名TableName)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值