欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

分页查询 效率最高

程序员文章站 2023-10-20 23:26:35
复制代码 代码如下:/* 日期:2009-03-19 功能:根据各种条件获取 游戏国家任务 列表数据 */ create procedure [dbo].[prgs_nat...
复制代码 代码如下:

/*

日期:2009-03-19
功能:根据各种条件获取 游戏国家任务 列表数据
*/
create procedure [dbo].[prgs_nation_task_getlist]

@pagesize int = 100, -- 每页显示记录条数,默认为100
@pageindex int = 1, -- 当前提取要显示的页码,默认为1,数据库根据pagesize,pageindex 计算返回一页数据

@rettotal int output, -- 记录总数
@retcount int output, -- 返回记录数
@retpageindex int output, -- 输出当前页码
@returndesc varchar(128) output -- 返回操作结果描述
as
begin

set nocount on
set xact_abort on

set @rettotal = 0
set @retcount = 0
set @retpageindex = @pageindex




-- 多条件取值
declare @err int -- 错误
declare @pagecount int -- 总页数
declare @beginrid int -- 开始行 rid
declare @maxrow int -- 最后行

select @rettotal = count(*)
from nationtask

select @err = @@error

if @err <> 0
begin
set @returndesc = '提取国家任务总数失败!'
return -1
end

-- 如果无数据, 则返回空结果集
if @rettotal = 0
begin
set @returndesc = '当前条件无国家任务记录!'
return 1
end

-- 计算总页数
set @pagecount = @rettotal / @pagesize

if @rettotal % @pagesize > 0
begin
set @pagecount = @pagecount + 1
end

-- 超过总页数,则返回空结果集
if @pageindex > @pagecount
begin
set @returndesc = '当前条件无国家任务记录!'
return 1
end

-- 获取 要返回页面的 第一行纪录的 rid
set @maxrow = @pagesize * (@pageindex - 1) + 1

set rowcount @maxrow

select @beginrid = rid
from nationtask
order by rid desc


-- 返回数据列表
set rowcount @pagesize

select rid
,taskname
,tasktitle
,imageid
,effectid
,starttime
from nationtask
where rid <= @beginrid
order by rid desc

set @retcount = @@rowcount

-- 结束
set @returndesc = '提取国家任务列表成功!'
return 1
end