RT 

解决方案 »

  1.   


    select top m-n+1 * from (select top m * from 表名 order by id)a order by id desc
      

  2.   

    同意!也可以,打开游标,用一个I自己记数了,i between n and m
      

  3.   

    取n到m行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
      

  4.   

    谢谢楼上几位的,但好像没有我想要的.我想用ID做标记,但ID删了就没有缺失了,所以想用游标,但对游标不是很清楚 .
    是不是用游标就不需要列名了?
      

  5.   

    你能详细讲下你的问题吗?你究竟是想要查询语句得到的记录数的N-M呢,还是特定条件的N-M?
      

  6.   

    先取得M行的所有数据,在从中取
    M-N+1 = M-(N-1)  就是N到M行的数据
      

  7.   

    这么说吧,
    我做了一个选题的数据库,里面的表分为单选 多选 判断 三种, 每个表里包含了10套题 . 当我通过程序选择第一套时,我希望从提取每个表里的前十条记录,当我选择第二套题里,希望提取每个表里的第11到20条记录. 但我不能用ID自动编号做为条件 ,因为有删除过的,ID也就不完整了.我想用游标,可是对游标还是不太了解,希望各位高手能给个解决的方法 .一定要用列名么? 谢谢啦.