现有一个表A,有一字段 id,id值唯一且不为空,最大值为20000000,最小值为1,
该表共有1900万行,求一方法得到id间断的那部分值。

解决方案 »

  1.   

    数据库版本?
    建议分批取数据,否则全表扫描会很慢。--SQL2005及以上
    with tbl as (
    select ROW_NUMBER() over (order by getdate()) ID
    from 表A
    )
    select * from tbl
    where not exists (
    select * from 表A where tbl.ID=ID)
      

  2.   


    1900万条,master..spt_values不能满足!
    你所你得新建表,里面保存1到200000000000000
    create table tb_number(number bigint)declare @i int
    set @i=1while @i<20000000
     begin
     insert into tb_number select @i
     set @i=@i+1
     end
    --建好之后select  tb.*   from  tb left join tb_number on tb.id=tb_number.number where tb_number.number is null
      

  3.   

    --SQL2K
    create table # (id int identity,a char(1))
    go
    insert into #
    select NULL
    GO 19000000
    select id
    from # a
    where not exists (
    select *
    from 表A 
    where a.id=id)
      

  4.   

    create table tb_number(number bigint)declare @i int
    set @i=1while @i<=20000000
     begin
     insert into tb_number select @i
     set @i=@i+1
     end
    --建好之后select  tb.*   from  tb right join tb_number on tb.id=tb_number.number where tb.number is null
      

  5.   

    有没有办法不建新表,还有用row_number的话,能存放1900万数据吗