查找SQL Server自增ID不连续记录

解决办法的核心思想:获取到当前记录的下一条记录的ID值,再判断这两个ID值是否差值为1,如果不为1那就表示数据不连续了。

 

-------------------------生成测试数据--------------------------
if exists (select * from sysobjects where id = OBJECT_ID('[hr_z_zfuser]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [hr_z_zfuser]

CREATE TABLE [hr_z_zfuser] (
[ID] [int]  IDENTITY (1, 1)  NOT NULL,
[sfzh] [nchar]  (10) NULL)

SET IDENTITY_INSERT [hr_z_zfuser] ON

INSERT [hr_z_zfuser] ([ID],[sfzh]) VALUES ( 1,'身份证号1')
INSERT [hr_z_zfuser] ([ID],[sfzh]) VALUES ( 2,'身份证号2')
INSERT [hr_z_zfuser] ([ID],[sfzh]) VALUES ( 3,'身份证号3')
INSERT [hr_z_zfuser] ([ID],[sfzh]) VALUES ( 6,'身份证号5')
INSERT [hr_z_zfuser] ([ID],[sfzh]) VALUES ( 7,'身份证号6') 
INSERT [hr_z_zfuser] ([ID],[sfzh]) VALUES ( 9,'身份证号4')

SET IDENTITY_INSERT [hr_z_zfuser] OFF

select * from [hr_z_zfuser]

 

 

-------------------拿到当前记录的下一个记录进行连接----------------------
select ID,new_ID--
into [hr_z_zfuser_temp]
from (
select ID,new_ID = (
select top 1 ID from [hr_z_zfuser]
where ID=(select min(ID) from [hr_z_zfuser] where ID>a.ID)
)
from [hr_z_zfuser] as a
) as b

select * from [hr_z_zfuser_temp]

 

 



--------------------得到不连续ID-----------------------------
select * from hr_z_zfuser_temp where ID <> new_ID - 1

 

 


--不连续的前前后后记录
select a.* from hr_z_zfuser a inner join (select * from hr_z_zfuser_temp where ID <> new_ID - 1)  b
on a.ID >= b.ID and a.ID <=b.new_ID
order by a.ID

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值