'标识列例子,不自动重排编号,而是自动补号'--创建得到最大id的函数 if object_id('[f_getid]') is not null drop function f_getid go create function f_getid() returns int as begin declare @id int if not exists(select 1 from tb where id='001') set @id=1 else begin select @id=max(id) from tb if @id is null set @id=1 else begin declare @id1 int select @id1=min(id) from tb a where id<>@id and not exists(select 1 from tb where id=a.id+1) if @id1 is not null set @id=@id1 set @id=@id+1 end end lb_re: return @id end go--创建表 if object_id('test.dbo.tb') is not null drop table tb go create table tb(id int primary key default dbo.f_getid(),name varchar(10)) go --插入记录测试 insert into tb(name) values('张三') insert into tb(name) values('张四') insert into tb(name) values('张五') insert into tb(name) values('张六') insert into tb(name) values('张七') insert into tb(name) values('张八') insert into tb(name) values('张九') insert into tb(name) values('张十')--显示插入的结果 select * from tb /* id name ----------- ---------- 1 张三 2 张四 3 张五 4 张六 5 张七 6 张八 7 张九 8 张十(8 行受影响)*/ --删除部分记录 delete from tb where name in('张三','张七','张八','张十')--显示删除后的结果 select * from tb /* id name ----------- ---------- 2 张四 3 张五 4 张六 7 张九(4 行受影响)*/ --再次插入记录 insert into tb(name) values('李一') insert into tb(name) values('李二')--显示插入的结果 select * from tb order by id /* id name ----------- ---------- 1 李一 2 张四 3 张五 4 张六 5 李二 7 张九(6 行受影响) */--删除环境 drop table tb drop function f_getid
if object_id('[f_getid]') is not null drop function f_getid
go
create function f_getid()
returns int
as
begin
declare @id int
if not exists(select 1 from tb where id='001')
set @id=1
else
begin
select @id=max(id) from tb
if @id is null
set @id=1
else
begin
declare @id1 int
select @id1=min(id) from tb a where id<>@id and not exists(select 1 from tb where id=a.id+1)
if @id1 is not null set @id=@id1
set @id=@id+1
end
end
lb_re:
return @id
end
go--创建表
if object_id('test.dbo.tb') is not null drop table tb
go
create table tb(id int primary key default dbo.f_getid(),name varchar(10))
go
--插入记录测试
insert into tb(name) values('张三')
insert into tb(name) values('张四')
insert into tb(name) values('张五')
insert into tb(name) values('张六')
insert into tb(name) values('张七')
insert into tb(name) values('张八')
insert into tb(name) values('张九')
insert into tb(name) values('张十')--显示插入的结果
select * from tb
/*
id name
----------- ----------
1 张三
2 张四
3 张五
4 张六
5 张七
6 张八
7 张九
8 张十(8 行受影响)*/
--删除部分记录
delete from tb where name in('张三','张七','张八','张十')--显示删除后的结果
select * from tb
/*
id name
----------- ----------
2 张四
3 张五
4 张六
7 张九(4 行受影响)*/
--再次插入记录
insert into tb(name) values('李一')
insert into tb(name) values('李二')--显示插入的结果
select * from tb order by id
/*
id name
----------- ----------
1 李一
2 张四
3 张五
4 张六
5 李二
7 张九(6 行受影响)
*/--删除环境
drop table tb
drop function f_getid
您这个不是
使用DBCC CHECKIDENT 命令DBCC CHECKIDENT ('table_name', NORESEED) --不重置当前标识值。DBCC CHECKIDENT 返回一个报表,它--指明当前标识值和应有的标识值。
DBCC CHECKIDENT ('table_name') --或
DBCC CHECKIDENT ('table_name', RESEED) --如果表的当前标识值小于列中存储的最大标识值,则使用标--识列中的最大值对其进行重置。
DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) --当前值设置为 new_reseed_value。如----果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value --作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标--识列中的最大值,以后引用该表时将产生 2627 号错误信息。