表内有N多数据,当我
select * from EMP顾名思义,就是查询表内所有的信息。但是现在我有这么一个需求:就是 我第一次执行查询的时候,只返回表内所有数据的第一行,
第二回查询的时候,就返回数据的第二行,第三次查询的时候,就返回数据的第三行
注意 : 无论第几行数据 只返回一行,千万别跟TOP1 TOP2 TOP3弄混了,TOP是返回所有的
select * from EMP顾名思义,就是查询表内所有的信息。但是现在我有这么一个需求:就是 我第一次执行查询的时候,只返回表内所有数据的第一行,
第二回查询的时候,就返回数据的第二行,第三次查询的时候,就返回数据的第三行
注意 : 无论第几行数据 只返回一行,千万别跟TOP1 TOP2 TOP3弄混了,TOP是返回所有的
from(
select rn=row_number() over(order by getdate()),* from EMP
) t
where rn=1
加个行号,第几次查询取第几个行号
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
--只返回表内所有数据的第一行
with cte as (
select ROW_NUMBER() OVER(ORDER BY getdate() ) ID,* from EMP
)
select * from cte where ID = 1
然后传递参数
@strsql = 'select top'+i+'(*) from EMP where ID not in (select top'+i-1+'(id)from EMP)'
exec @strsql