我想要使用分页的方式进行数据库查询。因此,我使用了一个通用表达式和排名函数来实现这一点。请看下面的示例。
declare @table table (name varchar(30));
insert into @table values ('Jeanna Hackman');
insert into @table values ('Han Fackler');
insert into @table values ('Tiera Wetherbee');
insert into @table values ('Hilario Mccray');
insert into @table values ('Mariela Edinger');
insert into @table values ('Darla Tremble');
insert into @table values ('Mammie Cicero');
insert into @table values ('Raisa Harbour');
insert into @table values ('Nicholas Blass');
insert into @table values ('Heather Hayashi');
declare @pagenumber int = 2;
declare @pagesize int = 3;
declare @total int;
with query as
(
select name, ROW_NUMBER() OVER(ORDER BY name ASC) as line from @table
)
select top (@pagesize) name from query
where line > (@pagenumber - 1) * @pagesize
在这里,我可以指定@pagesize和@pagenumber变量,以便只获取我想要的记录。但是,这个例子(来自存储过程)用于在Web应用程序中制作网格分页。这个Web应用程序需要显示页面数字。例如,如果数据库中有12条记录,页面大小为3,则我将不得不显示4个链接,每个链接代表一页。
但是,如果不知道有多少条记录,就无法实现这一点,而这个例子只提供记录的子集。
然后我更改了存储过程以返回count(*)。
declare @pagenumber int = 2;
declare @pagesize int = 3;
declare @total int;
with query as
(
select name, ROW_NUMBER() OVER(ORDER BY name ASC) as line, total = count(*) over()from @table
)
select top (@pagesize) name, total from query
where line > (@pagenumber - 1) * @pagesize
所以,除每一行外,它还将显示记录的总数。但我不喜欢这样。
我的问题是是否有更好的方法(性能),可以在不返回SELECT中的此信息的情况下设置@total变量。或者,这个总列是否会对性能造成太大影响?
谢谢。
WHERE
子句放在WITH
语句的第一个SELECT中...现在运行正常了!谢谢你,你让我今天过得开心 - Arxeiss