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

删除了N行数据后,序号如何重新排序,确保序号不断开,保持连续
比如说我现在有一个序号字段,123456789共9行数据,比如我删除了第2行的时候就是这样了13456789,有这时候如何可以在删除后序号保持不断,在删除后可以排序成12345678。

------解决方案--------------------
SQL code

dbcc checkident('tb_name',reseed,number)---number(续接的号)

------解决方案--------------------
建议你在显示数据的时候重用一列,自动生成12345678的格式。而原来那个字段就不要调整了,不然数据量大的话,很耗资源。
------解决方案--------------------
SQL code
就是重置你的 起始自增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