下一篇 » « 上一篇

sql server平台用存储过程进行分页的两种方法

作者:    时间:2008-01-22    来源:    点击:26238    本文共1篇文章 字体:[ ]

sql server平台用存储过程进行分页的两种方法

killergo的专栏

最近因为稍微有点空闲时间,所以想了下在sql server平台用存储过程的分页方式,现在列示在下面。

www.444p.com版权所有

实际测试时,在15000条数据情况下两者性能大体相当,在20000-30000条数据的情况下前者明显比后者性能更佳。更大数据量没有进行测试了。

www.444p.com

注意,数据表里面是否有 键和索引 对性能的影响相当大
-----------------------------------------------------
第一种: www.444p.com php学习之家

/*第一个参数是每页条数,第二个参数是目标页码*/

CREATE proc sp_fixpage @pagesize int,@destpage int as
set nocount on
declare @id int
declare @startid int php学习之家http://www.444p.com

select @startid = (@destpage - 1)*@pagesize php学习之家http://www.444p.com

set rowcount @startid
select @id = id from t_member

set rowcount @pagesize
set nocount off
select * from t_member where id > @id order by id
GO php学习之家


第二种:

CREATE PROCEDURE sp_fixpage1 @pagesize int ,@destpage int
as
set nocount on

CREATE TABLE #myTable(
[ID] [int] NOT NULL ,
[UserName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Origin] [int] NULL ,
[LatencyBuyDegree] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[UserType] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
[Email] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[UserLev] [int] NULL ,
[RegTime] [datetime] NULL ,
[RegMode] [bit] NULL ,
[PaperNum] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[UserClass] [bit] NULL ,
[password] [binary] (64) NULL ,
[Tel] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[drass] [varchar] (150) COLLATE Chinese_PRC_CI_AS NULL ,
[Zip] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[PaperNumlb] [int] NULL ,
[OpUser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Province] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , 本文来自 www.444p.com
[BirthDate] [datetime] NULL
) ON [PRIMARY] www.444p.com php学习之家

declare @tempPos int
declare @absPos int
declare @nowID int

www.444p.com版权所有

set @tempPos = 1
set @absPos = 1 php学习之家

if @destpage > 1
set @absPos = (@pagesize*(@destpage- 1) 1)

php学习之家http://www.444p.com

declare myCursor scroll cursor for
select [ID] from t_member order by id php学习之家

open myCursor
fetch absolute @absPos from myCursor into @nowID

php学习之家

while (@@fetch_status = 0) and (@tempPos <= @pagesize)
begin
set @tempPos = @tempPos 1
insert into #myTable select * from t_member where [ID] = @nowID
fetch next from myCursor into @nowID
end

close myCursor
deallocate myCursor www.444p.com

set nocount off

select * from #myTable
drop table #myTable
GO

php学习之家http://www.444p.com

责任编辑:semirock
发表评论
密码: (游客不需要密码)
记住我【Alt+S 或 Ctrl+Enter 快速提交】

搜索工具


《PHP与MYsql》点击排行