数据库存储过程分页显示

注:需要建立索引


复制代码 代码如下:

/*

经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:

exec getrecordfrompage news,newsid,10,100000

news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。

*/

/*

函数名称: getrecordfrompage

函数功能: 获取指定页的数据

参数说明: @tblname 包含数据的表名

@fldname 关键字段名

@pagesize 每页记录数

@pageindex 要获取的页码

@ordertype 排序类型, 0 – 升序, 1 – 降序

@strwhere 查询条件 (注意: 不要加 where)

作  者: 铁拳

邮  箱: unjianhua_kki@sina.com”>sunjianhua_kki@sina.com

创建时间: 2004-07-04

修改时间: 2004-07-04

*/

create procedure getrecordfrompage

@tblname varchar(255), — 表名

@fldname varchar(255), — 字段名

@pagesize int = 10, — 页尺寸

@pageindex int = 1, — 页码

@ordertype bit = 0, — 设置排序类型, 非 0 值则降序

@strwhere varchar(2000) = ” — 查询条件 (注意: 不要加 where)

as

declare @strsql varchar(6000) — 主语句

declare @strtmp varchar(1000) — 临时变量

declare @strorder varchar(500) — 排序类型

if @ordertype != 0

begin

set @strtmp = “<(select min”

set @strorder = ” order by [” + @fldname +”] desc”

end

else

begin

set @strtmp = “>(select max”

set @strorder = ” order by [” + @fldname +”] asc”

end

set @strsql = “select top ” + str(@pagesize) + ” * from [”

+ @tblname + “] where [” + @fldname + “]” + @strtmp + “([”

+ @fldname + “]) from (select top ” + str((@pageindex-1)*@pagesize) + ” [”

+ @fldname + “] from [” + @tblname + “]” + @strorder + “) as tbltmp)”

+ @strorder

if @strwhere != ”

set @strsql = “select top ” + str(@pagesize) + ” * from [”

+ @tblname + “] where [” + @fldname + “]” + @strtmp + “([”

+ @fldname + “]) from (select top ” + str((@pageindex-1)*@pagesize) + ” [”

+ @fldname + “] from [” + @tblname + “] where ” + @strwhere + ” ”

+ @strorder + “) as tbltmp) and ” + @strwhere + ” ” + @strorder

if @pageindex = 1

begin

set @strtmp = “”

if @strwhere != ”

set @strtmp = ” where (” + @strwhere + “)”

set @strsql = “select top ” + str(@pagesize) + ” * from [”

+ @tblname + “]” + @strtmp + ” ” + @strorder

end

exec (@strsql)

go

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐