小二哥's blog

----zhangzs8896(小二)

导航

Sql 中自己做标识列

Posted on 2004-11-01 10:27  小二哥  阅读(522)  评论(0编辑  收藏  举报
注:CSDN论坛SQL版块邹建为我解答问题时所写

原因:
如果使用系统的identity,会出现这样一种情况:当删除了一条记录,再增加一条新记录时会导致新增记录的id是记录中最大id+1.这样在现存的记录中id出现间断!所以,自己做一个标识列,目的就是弥补不足,出现上面情况时id自动更新,并连续。
注意:标识列是不允许修改其值的,所以如果你要实现删除后自动重排,就不能用标识列,否则会带来很多麻烦

第一步:创建得到最大id的函数:
              
create function f_getid()
returns int
as
begin
declare @id int
select @id=max(id) from tb
set @id=isnull(@id,0)+1
return(@id)
end
go

第二步:创建表:

create table tb(
id 
int default dbo.f_getid() primary key,
name 
varchar(10))
go

第三步:创建触发器,目的就是在删除表中记录时,自动更新id

create trigger t_delete on tb
AFTER 
delete
as
declare @id int,@mid int
select @mid=min(id),@id=@mid-1 from deleted
update tb set id=@id,@id=@id+1 where id>@mid
go