原文地址:http://www.maomao365.com/?p=7335
摘要:
数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql脚本的方式获取数据表中的数据是否连续的方法分享,如下所示:
实验环境:sqlserver 2008 R2
例:获取表test中keyId是否为连续的数据
实现思路:
1.采用row_number 对表test重新生成流水号
2.采用with as (cte)表达式将重新生成流水号的表放入临时表
3.对临时表自身进行 左连接(前一行和后一行互补),然后比较行中两张表的keyId 是否相差1,
如果相差1,则代表连续数据行,反之为非连续行数据
create table test (keyId int,info varchar(60)) go insert into test(keyId,info)values (1,‘maomao365.com‘),(2,N‘连续数判断‘),(4,N‘blog教程‘),(5,‘maomao‘),(8,‘test‘),(9,‘info‘) ; with tmp as (select ROW_NUMBER() over (order by keyId asc ) as keyIdNew,* from test ) select a.keyIdNew,a.keyId,a.info,case when ISNULL(a.keyId,0)-1 = b.keyId or b.keyId is null then ‘连续‘ else ‘不连续‘ end as ‘连续标志‘ from tmp a left join tmp b on a.keyIdNew = b.keyIdNew+1 ; go truncate table test drop table test
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。