表中有50条数据,怎么查询第20-30条数据,没有标识列。谢谢

解决方案 »

  1.   

    查询第X页,每页Y条记录最基本的处理方法(原理):如果表中有主键(记录不重复的字段也可以),可以用类似下面的方法,当然y,(x-1)*y要换成具体的数字,不能用变量:select top y * from 表 where 主键 not in(select top (x-1)*y 主键 from 表)如果表中无主键,可以用临时表,加标识字段解决.这里的x,y可以用变量.select id=identity(int,1,1),*  into #tb from 表
    select * from #tb where id between (x-1)*y and x*y-1
      

  2.   

    2005;with t
    as
    (select * ,rid = row_number() over (order by getdate()) from ta
    )
    select * from t where rid between 20 and 302000:select rid=identity(int,1,1),* into tmp from taselect *
    from tmp 
    where rid between 20 and 30drop table tmp
      

  3.   

     select top 10 * from (select top 30 * from tb) T order by ID
      

  4.   

    1. 
    select top m * from tablename where id not in (select top n id from tablename order by id asc/*|desc*/) 2. 
    select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入到临时表 
    set rowcount n   --只取n条结果
    select * from 表变量 order by columnname desc 3. 
    select top n * from  
    (select top m * from tablename order by columnname) a 
    order by columnname desc 
    4.如果tablename里没有其他identity列,那么: 
    先生成一个序列,存储在一临时表中.
    select identity(int) id0,* into #temp from tablename 取n到m条的语句为: 
    select * from #temp where id0 > =n and id0  <= m 如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行: 
    exec sp_dboption 你的DB名字,'select into/bulkcopy',true 
    5.如果表里有identity属性,那么简单: 
    select * from tablename where identity_col between n and m  6.SQL2005开始.可以使用row_number() over()生成行号
    ;with cte as
    (
     select id0=row_number() over(order by id),* from tablename
    )
    select * from cte where id0 between n to m
      

  5.   

    SQL2005:
    select *
    from 
    (
      select id=row_number() over(order by getdate()),* from tb
    )
    where id between 20 and 30
      

  6.   

    SQL2000:
    select id=identity(int,1,1),*  into # from tb
    select * from # where id between 20 and 30
    drop table #
      

  7.   

     select top 10 * from (select top 30 * from tb) T order by ID
    是最简单实用的
    很佩服大家能想出那么多的方法来
      

  8.   


    select * from 
    (
    select * ,rid = row_number() over (order by id) from ta 
    ) where rid >=20 and rid<=30
      

  9.   

    如果没有ID,SQL2000的你拿什么定位?