日期:2014-05-18  浏览次数:20521 次

数据库中自动递增列问题
数据库里自动递增列,怎样在删除记录后,仍从1开始计数?

假如用truncate table后

提示该表正由 FOREIGN KEY 约束引用。

------解决方案--------------------
SQL code
--使用dbcc checkident检查和设置表的标识值
create table tb
(
 id int primary key identity,
 name varchar(50)
)
 insert into tb 
 select 'a'
 union all
 select 'b' 
 union all 
 select 'c'
 union all
 select 'd'
go
 dbcc checkident(tb,noreseed)
go


delete from tb where id>2
go
--删除记录后,表tb只剩下两条记录了,但是此时表tb的标识值仍为4,可以用下面的语句重置标识值为2
dbcc checkident(tb,reseed,2)
go

dbcc checkident(tb,noreseed)
go

select * from tb


drop table tb

------解决方案--------------------
DBCC CHECKIDENT ('表名', RESEED, 0)

参考:
http://www.cnblogs.com/UouHt/archive/2008/11/26/1341667.html
------解决方案--------------------
FOREIGN KEY 约束引用说明你要删除的这个表有外键,也就是该表主键做外其他表的外键了,所以不能删除。你要么修改该外键约束允许级联删除,要么先把相关表相关记录删除,再回过头来TRUNCATE这张表。