大家都知道,只要有新加记录,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)