sqlserver中删除表中一条记录后,主键ID的序号重新排列,依然是从0开始按顺序排列,请问这个怎么实现?
如题 --------------------编程问答-------------------- 创建临时表 结构和主表一样然后 select 主表 into 临时表
然后 truncate 主表
再然后 select 临时表 into 主表 --------------------编程问答-------------------- 这样的话 如果数据量很大的话 会不会使程序变的很慢啊? --------------------编程问答-------------------- 会的
还有一个办法 就是 根据删除的ID 排序 在删除ID 后的记录 ID 自减 1
--------------------编程问答-------------------- 看样子这样实现还是不很好啊,程序太慢,做出来也不行 还是改结构算了,,,,,3Q Sandy945 拉 把分送上 --------------------编程问答-------------------- create or replace procedure pro_change_id
is
is_count number(10);
is_max number(10);
cursor my_cur is select * from table_name ;
is_row table_name%rowtype;
begin
select count(*) into is_count
from table_name ;
select max(id) into is_max
from table_name ;
open my_cur ;
loop
fetch my_cur into is_row ;
exit when my_cur%notfound;
is_max:=is_max+1;
update table_name
set id = is_max
where id = is_row.id;
end loop;
close my_cur ;
update table_name
set id = id-(is_max-is_count);
commit;
end;
--------------------编程问答-------------------- 主键ID重新排序是不现实的,如果给一个排序字段还好说,因为主键是有索引存在的,也就是唯一索引,通过那个查询可以加速,系统自动维护的,如果你经常更改主键值,意味着索引一定会经常跟着改,效率地下且容易产生碎片,影响索引查询效率。
补充:.NET技术 , C#