日期:2014-05-18 浏览次数:20532 次
dbcc checkident('tb_name',reseed,number)---number(续接的号)
------解决方案--------------------
建议你在显示数据的时候重用一列,自动生成12345678的格式。而原来那个字段就不要调整了,不然数据量大的话,很耗资源。
------解决方案--------------------
就是重置你的 起始自增ID号。 比如 你删除了9 这行的数据,希望重9开始还连续自增ID,那么就: dbcc checkident('tb_name',reseed,8)
------解决方案--------------------
一般来说没有必要保持序号的绝对连续-- 除非这个序号是直接显示在报表上的-- 如果是这样,还不如在生成报表的时候再临时生成这个序号。
如果一定要保持这个序号的绝对连续,在删除记录的时候,就需要同步执行类似下面的update语句:
update YourTable set ID=ID-1 where ID > 你删除的记录的ID
然后在按照楼上的方法重置下次的ID号。
如果删除语句不是针对某一条记录,而是针对多条记录的话,update语句就要做相应的调整,最坏情形下可能变成
update YourTable set id=(select count(1) from YourTable b where b.ID<=a.ID) from YourTable a -- 这个当记录量很大时会是非常恐怖的一件事情。
如果可以往Table中增加一个TmpID的字段--平时存放的是ID字段的值,而当删除记录的时候先临时将该记录的TmpID设置为0,然后再在做删除的话,则性能可以做一些改善:
Update YourTable set TmpID=0 Where ...
Update YourTable set ID=ID-(select Count(b) From YourTable b where b.ID<a.ID and b.TmpID=0) from YourTable a where a.TmpID<>0
Delete YourTable where TmpID=0
Update YourTable set TmpID=ID