在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID。当并发量很大并且这个字段不是主键的时候,就有可能会让这个值重复;或者在某些情况(例如插入数据的时候出错,或者是用户使用了Delete删除了记录)下会让ID值不是连续的,比如1,2,3,5,6,7,10,那么在中间就断了几个数据,那么我们希望能在数据中找出这些相关的记录,我希望找出的记录是3,5,7,10,通过这些记录可以查看这些记录的规律来分析或者统计;又或者我需要知道那些ID值是没有的:4,8,9。
解决办法的核心思想是:获取到当前记录的下一条记录的ID值,再判断这两个ID值是否差值为1,假如不为1那就表示数据不连续了。
类似文章有:
1. 简单但有用的SQL脚本Part6:特殊需要的行转列
2. 简单但有用的SQL脚本Part9:记录往上回填信息
执行下面的语句生成测试表和测试记录
--生成测试数据
if exists (select * from sysobjects where id = OBJECT_ID('[t_IDNotContinuous]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [t_IDNotContinuous] CREATE TABLE [t_IDNotContinuous] ( [ID] [int] IDENTITY (1, 1) NOT NULL, [ValuesString] [nchar] (10) NULL) SET IDENTITY_INSERT [t_IDNotContinuous] ON INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 1,'test') INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 2,'test') INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 3,'test') INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 5,'test') INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 6,'test') INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 7,'test') INSERT [t_IDNotContinuous] ([ID],[ValuesString]) VALUES ( 10,'test') SET IDENTITY_INSERT [t_IDNotContinuous] OFF select * from [t_IDNotContinuous]
(图1:测试表)
--拿到当前记录的下一个记录进行连接
select ID,new_ID into [t_IDNotContinuous_temp] from ( select ID,new_ID = ( select top 1 ID from [t_IDNotContinuous] where ID=(select min(ID) from [t_IDNotContinuous] where ID>a.ID) ) from [t_IDNotContinuous] as a ) as b select * from [t_IDNotContinuous_temp]

(图2:错位记录)
--不连续的前前后后记录
select * from [t_IDNotContinuous_temp] where ID <> new_ID - 1
--查询原始记录
select a.* from [t_IDNotContinuous] as a inner join (select * from [t_IDNotContinuous_temp] where ID <> new_ID - 1) as b on a.ID >= b.ID and a.ID <=b.new_ID order by a.ID

(图3:效果)
原文标题:查找SQL Server 自增ID值不连续记录
链接:http://www.cnblogs.com/gaizai/archive/2010/08/30/1812717.html
很多使用Windows 7系统的朋友都想小编反应,假如暂停使用电脑,鼠标会出现停顿现象,这是怎么回事呢 该怎么解决呢 下面就和小编一起去看下Windows 7 usb鼠标停顿的解决方法吧。 由于Windows 7系统中有一项USB选择性暂停造成的。这项设置主要为了节电,当他检测到用户没有对系统进行...
Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...
国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...
我一个朋友最近装装了Windows 7,他总感觉有人用了他的电脑,但是一直不确定,他想知道有没有人动用他的电脑,问我有没有办法 我说设置一下就行了: 启动Windows 7,在搜索栏中输入编辑组,马上就搜索到了编辑组策略,点击即可启动程序编辑组策略。依次展开组策略左侧树形列表的计算机配置/管理模...
最近一些Windows 7用户反馈说,自己在截屏的时候出现黑屏,导致自己截的图黑呼呼一片。这个问题该怎么解决?今天小编就为大家提供一个解决的方法。 步骤 1 在windows xp时代,很多用户都曾被视频截图后的“全黑图片”困扰。对此,在解决本地播放时出现的截图变黑问题,一般有两个方法可以用来解...
用Windows 7久了,C盘越来越大,原来50G的空间基本用完了,又不想重装系统,就想着能不能直接扩容。 在网上搜了半天,看了无数教程,都写得不明不白的,结合了几篇教程才终于搞明白。 重新总结一下,方便有需要的人。 所用软件: http://www.jb51.net/softs/57895...