查出不连续的ID

--把cards和card_id换成自己的表名和字段


方法一

 select a.rownumber from  (select ROW_NUMBER() over(order by card_id) as rownumber,card_id from cards) a

 left join cards c on a.rownumber=c.card_id

 where c.card_id is null

 

方法二

if exists(select 1 from sysobjects where id=object_id('temptable'))

  drop table temptable

select card_id,new_ID

into temptable

from (

  select card_id,new_ID = (select top 1 card_id from cards where card_id=(select min(card_id) from cards where card_id>a.card_id))

  from cards as a

) as b

--得到不连续id

select * from temptable where card_id <> new_ID - 1

--不连续的前前后后记录

select a.* from cards a inner join (select * from temptable where card_id <> new_ID - 1) b

on a.card_id >= b.card_id and a.card_id <=b.new_ID

order by a.card_id


方法三

select *,Convert(int,a.musicno)-Convert(int,b.MusicNo) as diffno from

(select ROW_NUMBER() over(order by MusicNo) as rownumber,MusicNo from #fs) a,

(select ROW_NUMBER() over(order by MusicNo)+1 as rownumber,MusicNo from #fs) b

where a.rownumber=b.rownumber

and Convert(int,a.musicno)-Convert(int,b.MusicNo)>1