SQL数据分页的存储过程


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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值