您的位置:首页 > 编程语言

通用存储过程代码实现高效分页

2008-12-04 21:58 288 查看
2008-12-16

DECLARE @rows_per_page AS INTEGER

DECLARE @current_page AS INTEGER

DECLARE @total_pages AS INTEGER

DECLARE @start_item AS INTEGER

DECLARE @items_count AS INTEGER

-- 设置每页的行数

SET @rows_per_page = 10

-- 设置要显示的页号(从1开始)

SET @current_page = 3

SELECT @total_pages = COUNT(*) / @rows_per_page + 1,

@items_count= COUNT(*)

FROM BarefootIndex;--表名(这是修改的地方)

--计算此页中从第几个开始显示

SET @start_item = @rows_per_page * (@current_page - 1)

select * from

(

select ROW_NUMBER() OVER (order by ID) as item--用什么排序(返回正在显示第几条)

,@items_count AS items_count --一共有多少条

,@current_page AS current_page --当前页

,@total_pages AS total_pages --一共多少页

,* from BarefootIndex--表名(这是修改的地方)

) as T

where T.item >= @start_item + 1

AND T.item <= @start_item + @rows_per_page

2007-5-5 15:52:00

-- 获取指定页的数据


CREATE PROCEDURE pagination


@tblName varchar(255), -- 表名


@strGetFields varchar(1000) = '*', -- 需要返回的列


@fldName varchar(255)='', -- 排序的字段名


@PageSize int = 10, -- 页尺寸


@PageIndex int = 1, -- 页码


@doCount bit = 0, -- 返回记录总数, 非 0 值则返回


@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序


@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)


AS




declare @strSQL varchar(5000) -- 主语句


declare @strTmp varchar(110) -- 临时变量


declare @strOrder varchar(400) -- 排序类型


if @doCount != 0


begin


if @strWhere !=''


set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere


else


set @strSQL = "select count(*) as Total from [" + @tblName + "]"


end


--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况




else


begin


if @OrderType != 0


begin


set @strTmp = "<(select min"


set @strOrder = " order by [" + @fldName +"] desc"


--如果@OrderType不是0,就执行降序,这句很重要!


end




else


begin


set @strTmp = ">(select max"


set @strOrder = " order by [" + @fldName +"] asc"


end


if @PageIndex = 1


begin


if @strWhere != ''


set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder


else


set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder


--如果是第一页就执行以上代码,这样会加快执行速度


end




else


begin


--以下代码赋予了@strSQL以真正执行的SQL代码


set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " 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) +" "+@strGetFields+ " from ["


+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["


+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["


+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "


+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder


end


end


exec (@strSQL)


GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: