sql server 2000分页存储过程

一、

名称pagination1

参数

tblName varchar(255), -- 表名

strGetFields varchar(1000) = '*', -- 需要返回的列

fldName varchar(255)='', -- 排序的字段名

PageSize int = 10, -- 页尺寸

PageIndex int = 1, -- 页码

doCount bit = 0, -- 返回记录总数, 0 值则返回

OrderType bit = 0, -- 设置排序类型, 0 值则降序

strWhere varchar(1500) = '' -- 查询条件(注意: 不要加where)

CREATE PROCEDURE pagination1

 

@tblName varchar(255), -- 表名

 

@strGetFields varchar(1000) = '*', -- 需要返回的列

 

@fldName varchar(255)='', -- 排序的字段名

 

@PageSize int = 10, -- 页尺寸

 

@PageIndex int = 1, -- 页码

 

@doCount bit = 0, -- 返回记录总数, 0 值则返回

 

@OrderType bit = 0, -- 设置排序类型, 0 值则降序

 

@strWhere varchar(1500) = '' -- 查询条件(注意: 不要加where)

 

AS

 

declare @strSQL varchar(5000) -- 主语句

 

declare @strTmp varchar(110) -- 临时变量

 

declare @strOrder varchar(400) -- 排序类型

 

 

 

if @doCount != 0

 

begin

 

if @strWhere !=''

 

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere

 

else

 

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

 

end

 

--以上代码的意思是如果@doCount传递过来的不是,就执行总数统计。以下的所有代码都是@doCount为的情况

 

else

 

begin

 

 

 

if @OrderType != 0

 

begin

 

set @strTmp = '<(select min'

 

set @strOrder = ' order by [' + @fldName +'] desc'

 

--如果@OrderType不是,就执行降序,这句很重要!

 

end

 

else

 

begin

 

set @strTmp = '>(select max'

 

set @strOrder = ' order by [' + @fldName +'] asc'

 

end

 

 

 

if @PageIndex = 1

 

begin

 

if @strWhere != ''

 

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder

 

else

 

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder

 

--如果是第一页就执行以上代码,这样会加快执行速度

 

end

 

else

 

begin

 

--以下代码赋予了@strSQL以真正执行的SQL代码

 

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['

 

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder

 

 

 

if @strWhere != ''

 

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['

 

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['

 

+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['

 

+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '

 

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

 

end

 

end

 

exec (@strSQL)

 

GO

 

 

二、

名称pagination2

参数

tblName varchar(255), -- 表名

strGetFields varchar(1000) = '*', -- 需要返回的列

fldName varchar(255)='', -- 排序的字段名

PageSize int = 10, -- 页尺寸

PageIndex int = 1, -- 页码

doCount bit = 0, -- 返回记录总数, 0 值则返回

OrderType bit = 0, -- 设置排序类型, 0 值则降序

strWhere varchar(1500) = '' -- 查询条件(注意: 不要加where)

CREATE   PROCEDURE   pagination2

    @strTable       varchar(50),   --表名 

    @strColumn      varchar(50),   --按该列来进行分页 

    @intColType     int,           --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型 

    @intOrder       bit,           --排序,0-顺序,1-倒序 

    @strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段 

    @intPageSize    int,           --每页记录数 

    @intPageNum     int,           --指定页 

    @strWhere       varchar(800), --查询条件 

    @intPageCount   int   OUTPUT   --总页数 

 AS  

 

DECLARE   @sql    nvarchar(4000) --用于构造SQL语句

 DECLARE   @where1 varchar(800)   --构造条件语句

 DECLARE   @where2 varchar(800)   --构造条件语句

 IF   @strWhere   is   null   or   rtrim(@strWhere)=''  

 -- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格

 BEGIN  --没有查询条件 

      SET   @where1=' WHERE '  

      SET   @where2=' '  

 END  

 ELSE  

 BEGIN  --有查询条件 

      SET   @where1=' WHERE ('+@strWhere+') AND '

      SET   @where2=' WHERE ('+@strWhere+') '  

 END   

 

set @strColumn = ' ' + @strColumn + ' '

 set @strColumnlist = ' ' + @strColumnlist + ' '

 --构造SQL语句,计算总页数。计算公式为总页数= Ceiling ( 记录个数/ 页大小)

 SET   @sql='SELECT   @intPageCount=CEILING((COUNT(*)+0.0)/'

        + CAST(@intPageSize   AS   varchar)

        + ')   FROM   ' + @strTable + @where2  

 --执行SQL语句,计算总页数,并将其放入@intPageCount变量中

 EXEC sp_executesql @sql,N'@intPageCount   int   OUTPUT',@intPageCount   OUTPUT

 --将总页数放到查询返回记录集的第一个字段前,此语句可省略

 SET  @strColumnlist= Cast(@intPageCount as varchar(30)) + ' as PageCount,' + @strColumnlist   

 IF   @intOrder=0   --构造升序的SQL

      SET @sql='SELECT TOP '+ CAST(@intPageSize   AS   varchar) +

               @strColumnlist +  

               ' FROM ' + @strTable + @where1 +

               @strColumn + '>(SELECT MAX('+@strColumn+') '+  

               ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS  varchar) +  

               @strColumn + ' FROM '+ @strTable+@where2+'ORDER BY '+@strColumn+') t) ORDER BY '+ @strColumn  

 ELSE              --构造降序的SQL  

      SET @sql='SELECT TOP '+ CAST(@intPageSize   AS   varchar) +

               @strColumnlist+  

               ' FROM '+ @strTable + @where1 +

               @strColumn + '<(SELECT   MIN('+@strColumn+')   '+  

               ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS  varchar) +  

               @strColumn + ' FROM '+ @strTable+@where2+'ORDER   BY '+@strColumn+'   DESC)   t)   ORDER   BY   '+  

               @strColumn + ' DESC'       

 IF   @intPageNum=1--第一页 

      SET   @sql='SELECT   TOP   '+CAST(@intPageSize   AS   varchar) + @strColumnlist + ' FROM '+@strTable+  

                 @where2+'ORDER   BY   '+@strColumn+CASE   @intOrder WHEN  0 THEN  '' ELSE  ' DESC' 

 END  

 --PRINT   @sql  

 EXEC(@sql)  

 

 

 

 

 

 

 

 

 

 

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值