分页存储过程

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER Procedure [dbo].[PrePagers]
  @tblName nvarchar(255),         --表名
  @getColumn nvarchar(2000)=' * ',  --显示的列名
  @currPage  int,                 --当前页数
  @pageSize  int,                 --显示页数大小
  @strWhere  nvarchar(2000)=' ',   --查询条件 (参数不要加Where)
  @sortColumn nvarchar(200)=' ' ,  --排序字段
  @sortType   bit=0 ,             --排序类型 默认为降序(1 升序,0降序)
  @doCount   bit=0,               --返回,非0返回记录总数
  @pkColumn  nvarchar(50)=' ',     --主键名称
  @Count   int output              --总记录数
 

AS
  DECLARE @strSql nvarchar(4000) --主语句
  Declare   @strTmp   nvarchar(1000) ----存放取得查询结果总数的查询语句
  DECLARE @strOrder nvarchar(400) --排序类型
 
 
BEGIN
  IF(@sortColumn!='')   --当排序列名不为空时,说明有排序功能,
 BEGIN
   IF(@sortType =1)     --当排序类型是1 表示升序
    select @strOrder=' ORDER BY '+ @sortColumn +' ASC '
   ELSE
    SET @strOrder=' ORDER BY '+ @sortColumn +' DESC '
   
   IF(@strWhere!='')    --当查询条件不为空时,执行if中语句
    SET @strSql ='SELECT TOP '+ str(@pageSize) + @getColumn +' FROM '+ @tblName +' WHERE  '
                  + @strWhere + @pkColumn + ' NOT IN (SELECT TOP '+ str((@currPage-1)*@pageSize)+''
                  + @pkColumn +' FROM ' + @tblName +' WHERE  ' +@strWhere +') ' + @strOrder 
    else
    SET @strSql='SELECT TOP ' + str(@pageSize) + @getColumn +' FROM '+ @tblName +' WHERE  '
                  + @pkColumn + ' NOT IN (SELECT TOP '+ str((@currPage-1)*@pageSize)
                  +@pkColumn +' FROM ' + @tblName+ ')'+@strOrder
END
  ELSE
BEGIN          
  IF(@strWhere!='')
   SET @strSql='SELECT TOP '+ STR(@pageSize)+ @getColumn + ' FROM '+ @tblName + ' WHERE '
                +@strWhere + @pkColumn +' NOT IN (SELECT TOP '+ STR((@currPage-1)*@pageSize)
                +@pkColumn + ' FROM '+ @tblName +' WHERE  '+ @strWhere +')'
  ELSE
   SET @strSql='SELECT TOP ' + str(@pageSize) + @getColumn +' FROM '+ @tblName +' WHERE '
                  + @pkColumn + ' NOT IN (SELECT TOP '+ str((@currPage-1)*@pageSize)+''
                   + @pkColumn +' FROM ' + @tblName +')'
END
IF(@doCount!=0)         --当需要返回总记录数据时执行
 BEGIN
 IF(@strWhere!=' ')      --返回行总记录数

 
  set @strTmp=N'select COUNT(*)  FROM '+ @tblName +' WHERE  '+ @strWhere
 ELSE
  set @strTmp=N'select Count(*)   FROM   '+@tblName

END
 exec sp_executesql @strTmp,N'@Count int output',@Count output

 EXEC(@strSql)
print @strSql
return
END

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值