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 = ' + isnullCONVERT(nvarchar@RecordCount), '<NULL>' )
PRINT @PrnLine
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值