MSSQL之自增列丢失ID找回--粗略解决方案
公告:QQ群:124766907,若你是在.NET领域有独到见解,并有深厚的编程功力,在某一领域具有专长,欢迎本您入群,本群已经有好几位MVP,在SL,.NET,BS方面具有造诣的人欢迎进群。无4年以上经验者勿加,本群追寻高端顶级,多谢。
由于群里一个朋友说,自增列丢失的ID找回,有什么好的办法,故自己写了测试表和数据进行SQL分析,先做记录于此,貌似是可以通过的,只是若是删除的是最后的数据,这里就有BUG了,最后的找不到。比如我这表,我删除的是最后一条ID=11的,那ID=11的估计就打印不出来了。各位有何妙法?
--建表
CREATE TABLE [dbo].[tb](
[id] [int] IDENTITY(1,1) NOT NULL,
[username] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_tb] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
--插入数据
insert tb values('wonder0')
insert tb values('wonder1')
insert tb values('wonder2')
insert tb values('wonder3')
insert tb values('wonder4')
insert tb values('wonder5')
insert tb values('wonder6')
insert tb values('wonder7')
insert tb values('wonder8')
insert tb values('wonder9')
insert tb values('wonder10')
insert tb values('wonder11')
delete from tb where id in (7,9)
select *from tb
--查询自增ID丢失ID
declare @totalMax int
declare @step int
declare @temp int
declare @final int
set @step=0
SELECT @totalMax= max(id) from tb
while @step<@totalMax+1
begin
select @temp=id from tb where id=@step
if(@step<>@temp)
print @step
set @step=@step+1
end