存储过程分页

 

/* 分页方案
select top 页大小 *
from table1
where id>
       (select max (id) from
              (select top ((页码-1)*页大小) id from table1 order by id) as T
       )    
order by id
*/
 
CREATE PROCEDURE P_Pagination
       @tblName   varchar(50),                    -- 表名,必填
       @rtFields varchar(500) = '*',            -- 需要返回的列, 默认返回所有列,强烈要求该处写明需要返回的列名
       @fldName varchar(255)='',                   -- 排序的字段名,必填
       @PageSize   int = 20,                       -- 页尺寸
       @PageIndex int = 1,                       -- 页码
       @doCount bit = 0,                  -- 返回记录总数, 0:不返回;1:返回;默认:0
       @OrderType bit = 0,                 -- 设置排序类型, 0:升序;1:降序;默认:0
       @strWhere varchar(1500) = ''               -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL   varchar(2000)               -- SQL语句
declare @strTmp   varchar(20)                 -- 临时变量
declare @strOrder varchar(100)                  -- 排序
 
if @tblName=''
begin
       RAISERROR('表名必填!',16,1)
       return
end
 
if @doCount != 0                        --如果@doCount传递过来的不是0,就执行总数统计。
begin
       set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
       if @strWhere !=''
              set @strSQL = @strSQL + ' where '+@strWhere
end 
else                                     --返回查询结果集
begin
       if @fldName=''
       begin
              RAISERROR('排序列名称必填!',16,1)
              return
       end
       if @PageIndex<=0 or @PageSize<=0
       begin
              RAISERROR('数据格式不正确!',16,1)
              return
       end
       set @strSQL = 'select top ' + str(@PageSize) +' '+@rtFields+ ' from ['+ @tblName + '] where 1=1 '
       if @strWhere != ''  
              set @strSQL = @strSQL + ' and ' + @strWhere + ' '
 
       if @OrderType != 0                     --降序
       begin
              set @strTmp = '<(select min'
              set @strOrder = ' order by [' + @fldName +'] desc'
       end
       else                              --升序
       begin
              set @strTmp = '>(select max'
              set @strOrder = ' order by [' + @fldName +'] asc'
       end
 
       if @PageIndex = 1               --如果是第一页执行以下代码,这样会加快执行速度
       begin
              set @strSQL = @strSQL + @strOrder
       end
       else
       begin      
              set @strSQL = @strSQL + ' and [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
       end
end  
exec (@strSQL)
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值