表内有N多数据,当我
 select * from EMP顾名思义,就是查询表内所有的信息。但是现在我有这么一个需求:就是 我第一次执行查询的时候,只返回表内所有数据的第一行,
第二回查询的时候,就返回数据的第二行,第三次查询的时候,就返回数据的第三行
注意 : 无论第几行数据 只返回一行,千万别跟TOP1 TOP2 TOP3弄混了,TOP是返回所有的

解决方案 »

  1.   

    select *
    from(
    select rn=row_number() over(order by getdate()),* from EMP
    ) t
    where rn=1
    加个行号,第几次查询取第几个行号
      

  2.   

    --只返回表内所有数据的第一行
    select ROW_NUMBER() OVER(ORDER BY getdate() ) ID,* from EMP where ID = 1
    --只返回表内所有数据的第二行
    select ROW_NUMBER() OVER(ORDER BY getdate() ) ID,* from EMP where ID = 2
    --只返回表内所有数据的第三行
    select ROW_NUMBER() OVER(ORDER BY getdate() ) ID,* from EMP where ID = 3
      

  3.   

    --更正2楼:
    --只返回表内所有数据的第一行
    with cte as (
    select ROW_NUMBER() OVER(ORDER BY getdate() ) ID,* from EMP
    )
    select * from cte where ID = 1
      

  4.   

    设置全局变量,记录次数
    然后传递参数
    @strsql = 'select top'+i+'(*) from EMP where ID not in (select top'+i-1+'(id)from EMP)'
    exec @strsql