☆用心生活☆-wonder-{改变自己才能让自己过上不一样的日子。为自己加油!}

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
posted @ 2011-09-07 11:23  ☆用心生活☆  阅读(784)  评论(2编辑  收藏  举报
本作者写的任何文章均属原创,若要转载,请注明出处;若
进行与文章有关的商业行为,本作者保留拥有诉诸法律追究
侵权的任何行为。文章只代表本人某一学习时间段内对某一
技术的说明,不代表具有绝对的正确性,若要学习,请与各
位高手编程人员讨论学习。本文章也不代表自己某一时期某
一公司的任何专著和机密文件。仅仅提供自我学习和他人学
习的文章参考,以及自我知识记录。wanzegui325#163.com