原文地址:http://www.maomao365.com/?p=7335 摘要: 數據表中,有一列是自動流水號,由於各種操作異常原因(或者插入失敗),此列數據會變的不連續,下文將講述使用sql腳本的方式獲取數據表中的數據是否連續的方法分享,如下所示: 實驗環境:sqlserver 2008 R2 ...
原文地址: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