日期:2014-05-17  浏览次数:20668 次

如何处理标识列断缺
经常对标识列进行删除、插入操作,使得标识列出现断缺,
请问,怎样实现标识列始终是连续的,不断缺?

------解决方案--------------------
缺了就缺了啊,这有什么影响的
维护成本太大,所以都不会去维护他的联系性。
------解决方案--------------------
SQL code

alter table t drop column id;  
alter table t add id int identity(1,1) not null;  
go

------解决方案--------------------
标识列只是为了标识而已,为什么非要连续?
------解决方案--------------------
或者触发器进行约束

SQL code
create trigger delid
on 表名
for delete,update
as
begin
if @@rowcount=1
update 表名 set id=id-1 where id>(select id from deleted)
end

------解决方案--------------------
如果标识不是主键的话,那就有问题了。主键就是为了标识唯一的一行,行数的话不应该是那样看的。select count(1) from 表就可以拉
------解决方案--------------------
SQL code

如果要维持他的连续,就不能使用标识,改由其他方法实现,如一楼所说,没必要去维护标识列的连续性
实在要维护,就在插入数据时使用最小缺失值
查找最小缺失值的方法如下
select top (1) n + 1 from 
(select n,row_number()over(order by n)rn from #t )a
where rn = n order by n desc

------解决方案--------------------
你就为了这个原因要标识列连续??
只能说你是个完美主义者
------解决方案--------------------
前端的展示你在select 的时候用row_number()来创建一个id到结果集即可,主键是为了标识一行,你要记住这一点。
------解决方案--------------------
难道客户每次都要看完全表??这个客户看到行数,一般都是用前台控件的rowcount功能吧,数据集控件可以知道有多少条数据。