加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方

发布时间:2020-12-12 14:22:12 所属栏目:MsSql教程 来源:网络整理
导读:原文地址:http://www.maomao365.com/?p=7335 ? 摘要: ? ? ?数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql脚本的方式获取数据表中的数据是否连续的方法分享,如下所示: ? ? ?实验环境:sqlserv

原文地址: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,Nblog教程),(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 

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读