织梦CMS - 轻松建站从此开始!

罗索

SQL数据分页的存储过程

jackyhwei 发布于 2010-11-03 09:39 点击:次 
SQL数据分页的存储过程及测试用法
TAG:

Create Procedure Common_Page


(


 @strTable varchar(500),


 @strSlt varchar(500)=null,


 @strKey varchar(500)='ID',


 @strWhere varchar(500) =null,


 @strOrder varchar(500)='ID desc',


 @PageSize int=20,


 @Page int=1,


 @RecordCount int output


)


as


declare @SQL nvarchar(4000)


if(@Page<1)


set @Page=1


declare @startID int


set @SQL=N'select @RC=count(*) from '+@strTable+' '+@strWhere


exec sp_executesql @SQL,N'@RC int output',@RecordCount output


--select @startID=id from adminlog order by id desc


set @startID=@PageSize*(@Page-1)+1


if(@startID>@RecordCount)


begin


        --返回空记录


    set @SQL=N'select '+@strSlt+' from '+@strTable+'where 1=0'


end


else


begin


    set @SQL='set RowCount '+ Convert(varchar(30),@startID) +'    '


    set @SQL=@SQL+'select @S='+@strKey+' from '+@strTable+' '+@strWhere+' order by '+@strOrder


    exec sp_executesql @SQL,N'@S int output',@startID output


    if(Len(Ltrim(@strWhere))>6)


        set @strWhere=@strWhere+ ' and '+@strKey+'<='+Convert(varchar(30),@startID)


    set @SQL='set RowCount '+ Convert(varchar(30),@PageSize) +'    '


    set @SQL=@SQL+'select '+@strSlt+' from '+@strTable+' '+@strWhere+' order by '+@strOrder



end


execute(@SQL)



 测试



DECLARE @RC int


DECLARE @strTable varchar(500)


DECLARE @strSlt varchar(500)


DECLARE @strKey varchar(500)


DECLARE @strWhere varchar(500)


DECLARE @strOrder varchar(500)


DECLARE @PageSize int


DECLARE @Page int


DECLARE @RecordCount int


SELECT @strTable = 'AdminLog l left join adminMenu m on L.Handle=m.id'


SELECT @strSlt = 'L.*,M.Name'


SELECT @strKey = 'l.id '


SELECT @strWhere = 'where l.areaid=0 '


SELECT @strOrder = 'l.id desc'


SELECT @PageSize = 50


SELECT @Page = 2


SELECT @RecordCount = NULL


EXEC @RC = [MainDB].[dbo].[Common_Page] @strTable, @strSlt, @strKey, @strWhere, @strOrder, @PageSize, @Page, @RecordCount OUTPUT


DECLARE @PrnLine nvarchar(4000)


PRINT '存储过程: MainDB.dbo.Common_Page'


SELECT @PrnLine = '    返回代码 = ' + CONVERT(nvarchar, @RC)


PRINT @PrnLine


PRINT '    输出参数: '


SELECT @PrnLine = '        @RecordCount = ' + isnull( CONVERT(nvarchar, @RecordCount), '<NULL>' )


PRINT @PrnLine

(wgf2006)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201011/10398.html]
本文出处:CSDN博客 作者:wgf2006
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容