因为你每次都取出select ROW_NUMBER() OVER(ORDER BY date) AS rownum ,A.* from SUMData A的数据,注意你没有where条件,所以永远都是那个数据。建议你加上主键
建议 1.加上主键. 2在需要排序的字段上建索引. 3.避免使用select *.
ROW_NUMBER() OVER(ORDER BY date) 改成ROW_NUMBER() OVER(ORDER BY id) 数据就不重复了,不会吧。虽然这样导致,排的顺序不同,但是你的数据是没有变化的,比如,每页10条数据,现在日期为xxx的一个11条,那么第一页就是10条,第二页就只有1条吧。
你试试这个分页代码: declare @page_size int; declare @page_num int;--比如:每页10条记录 set @page_size = 10;--比如:先取第1页 set @page_num = 1;select * from ( select *, row_number() over(order by @@servername) as rownum, --这里按照@@servername来排序, --你可以根据需要按照id,sid,sname等字段来排序 (row_number() over(order by @@servername) - 1) / @page_size as pagenum from sys.objects )t where pagenum = @page_num - 1
按照你的代码改了,你试试,有没有重复的数据: declare @page_size int; declare @page_num int;--比如:每页10条记录 set @page_size = 10;--比如:先取第1页 set @page_num = 1;select * from ( select A.*, (row_number() over(order by date) - 1) / @page_size as pagenum from SUMData A )t where pagenum = @page_num - 1
1.加上主键.
2在需要排序的字段上建索引.
3.避免使用select *.
ROW_NUMBER() OVER(ORDER BY date) 改成ROW_NUMBER() OVER(ORDER BY id) 数据就不重复了,不会吧。虽然这样导致,排的顺序不同,但是你的数据是没有变化的,比如,每页10条数据,现在日期为xxx的一个11条,那么第一页就是10条,第二页就只有1条吧。
declare @page_size int;
declare @page_num int;--比如:每页10条记录
set @page_size = 10;--比如:先取第1页
set @page_num = 1;select *
from
(
select *,
row_number() over(order by @@servername) as rownum,
--这里按照@@servername来排序,
--你可以根据需要按照id,sid,sname等字段来排序
(row_number() over(order by @@servername) - 1) / @page_size as pagenum
from sys.objects
)t
where pagenum = @page_num - 1
declare @page_size int;
declare @page_num int;--比如:每页10条记录
set @page_size = 10;--比如:先取第1页
set @page_num = 1;select *
from
(
select A.*, (row_number() over(order by date) - 1) / @page_size as pagenum
from SUMData A
)t
where pagenum = @page_num - 1