查找数据库自增身份值不连续记录
类型:电子教程大小:8.5M语言:中文评分:8.3标签:立即下载在很多的时候,我们会在数据库的表中设置一个字段:ID,这个身份是一个身份,也就是说这是一个自增身份证。当并发量很大并且这个字段不是主键的时候,就有可能会让这个值重复;或者在某些情况(例如插入数据的时候出错,或者是用户使用了删除删除了记录)下会让身份值不是连续的,比如1,2,3,5,6,7,10,那么在中间就断了几个数据,那么我们希望能在数据中找出这些相关的记录,我希望找出的记录是3,5,7,10,通过这些记录可以查看这些记录的规律来分析或者统计;又或者我需要知道那些身份值是没有的:4,8,9。
解决办法的核心思想是:获取到当前记录的下一条记录的身份值,再判断这两个身份值是否差值为1,如果不为一那就表示数据不连续了。
执行下面的语句生成测试表和测试记录-生成测试数据如果存在(选择* from sobjectswhereid=OBJECT _ ID('[t _ IDNotContinuous]')和OBJECTPROPERTY(id,' IsUserTable ')=1)删除表[t _ IDNotContinuous]创建表[t _ IDNotContinuous]([ID][int]IDENTITY(1,1)NOTNULL,[VALUES string][nchar](10)NULL)设置IDENTITY _ INSERT[t _ IDNotContinuous]ONINSERT[t _ IDNotContinuous]([ID],[ValuesString])VALUES(1,' test ')INSERT[t _ continuous
(图1:测试表) - 拿到当前记录的下一个记录进行连接从[t _ IDNotContinuous]中选择[t _ IDNotContinuous _ temp]从[t _ IDNotContinuous]中选择[t _ IDNotContinuous]从[t _ IDNotContinuous]中选择[t _ ID].ID))从[t_IDNotContinuous]asa)中选择作为从[t_IDNotContinuous_temp]中选择*
(图2:错位记录) - 不连续的前前后后记录从[t _ IDNotContinuous _ temp]中选择*其中新_ID-1 -查询原始记录选择。*从[t _ IDNotContinuous]中选择*作为innerjoin(从[t _ IDNotContinuous _ temp]中选择*其中新_标识-1)作为博纳.ID=b . IDanda。ID=b.new _ IDorderbya .身份
版权声明:查找数据库自增身份值不连续记录是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。