这个序号就是一个行号,不同SO下的一个行号,就好像是这样
A 001 JKJKJKJK
A 002 LJUIIOO
A 003 IOUOKJKLJ
B 001 FDFDFDF
B 002 FDFEWR
[/Quote]
用触发器吧,比如删除了A 001 JKJKJKJK 就把比001大的序号都减1 删除了A 002 LJUIIOO就把大于002的序号都减一
一般来说没有必要保持序号的绝对连续-- 除非这个序号是直接显示在报表上的-- 如果是这样,还不如在生成报表的时候再临时生成这个序号。
如果一定要保持这个序号的绝对连续,在删除记录的时候,就需要同步执行类似下面的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