您当前位置:设计在线网 >> Sql Server >> 浏览文章

使用sql2005通用存储过程分页

分享到:
本文章讲述了使用sql2005通用存储过程分页.

SQL2005通

用存储过程:非常适合AspNetPager7.2分页 CREATE PROCEDURE [dbo].[P_newpager]

@tblname VARCHAR(255), -- 表名

@strGetFields nvarchar(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 1=1 '+ @strWhere

else

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

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

else

begin

if @OrderType !=0--降序

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 1=1 '+ @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) +''[email protected]+' from ['+ @tblName +'] where ['+ @fldName +']'+ @strTmp +'(['+ @fldName +']) from (select top '+ str((@PageIndex-1)*@PageSize) +' ['+ @fldName +'] from ['+ @tblName +'] where 1=1 '+ @strWhere +''+ @strOrder +') as tblTmp) and 1=1 '+ @strWhere +''+ @strOrder

end

if @strWhere !=''--得到记录的总行数

set @strSQL [email protected]+'; select count(*) as Total from ['+ @tblName +'] where 1=1 '+ @strWhere

else

set @strSQL [email protected]+'; select count(*) as Total from ['+ @tblName +']'

end

exec (@strSQL)

RETURN

下面是页面调用代码: 绑定方法: publicvoid Bing()

{

pagerAS.RecordCount = DoText.GetNewstCount(); //获取总数

gvList.DataSource = DoText.GetNewsList(pagerAS.PageSize, pagerAS.CurrentPageIndex);//绑定

gvList.DataBind();

}

AspNetPager事件

protectedvoid pagerAS_PageChanged(object sender, EventArgs e)

{

Bing();//调用绑定

}

推荐阅读:
如何将Apache日志实时写入mysql
有关SQL循环语句讲解
数据库查询优化问题讲解
推荐文章  
赞助商链接  
热门排行  
主题推广  
中国设计在线网 All Rights Reserved. 互联网违法和不良信息举报
信息产业部备案号:湘ICP备09001063号