日期:2014-05-17  浏览次数:20787 次

SQL 自增列问题
环境:数据量很多,因为有删除数据,出现不连续的自增ID

需求:从第十行开始,
            也就是说从ID=10开始,
              让10后面的ID接上来,
   也就是说后面的ID是11,12,13.....N

求代码实现


------解决方案--------------------
一个案例,供参考.

create table lee
( id int identity(1,1) not null,
  name varchar(10)
  constraint pk_lee primary key(id)  
)
 
insert into lee(name)
 select 'aa' union all
 select 'bb' union all
 select 'cc' union all
 select 'dd' union all
 select 'ee'
 
select id,name from lee
 
/*
id          name
----------- ----------
1           aa
2           bb
3           cc
4           dd
5           ee
 
(5 row(s) affected)
*/
 
--原先在表中删除了的一条数据
delete from lee where id=3
  
--现在要重新添加回那张表中
insert into lee(name) select 'cc'
 
--可是主键不是连续的了
select id,name from lee
 
/*
id          name
----------- ----------
1           aa
2           bb
4           dd
5           ee
6           cc
 
(5 row(s) affected)
*/
 
--主键跟删除之前那样使得主键ID连续
delete from lee where id=6  --> 删除测试记录
 
set identity_insert lee on
 
insert into lee(id,name) select 3,'cc'
 
set identity_insert lee off
 
 
select id,name from lee
 
/*
id          name
----------- ----------
1           aa
2           bb
3           cc
4           dd
5           ee
 
(5 row(s) affected)
*/

------解决方案--------------------
为什么会有这种需求,强迫症吗?
------解决方案--------------------
id如果与外表已经关联了,这样直接改id,关联不就(几乎)全部错了?