通用的SQL数据分页存储过程

CREATE  PROCEDURE spGetPageOfRecords
   @pageSize  int  =  20,                                       --  分页大小
   @currentPage  int ,                                   --  第几页
   @columns  varchar( 1000=  ' * ',                         --  需要得到的字段
   @tableName  varchar( 100),                                --  需要查询的表    
   @condition  varchar( 1000=  '',                       --  查询条件, 不用加where关键字
   @ascColumn  varchar( 100=  '',                        --  排序的字段名 (即 order by column asc/desc)
   @bitOrderType  bit  =  0,                                  --  排序的类型 (0为升序,1为降序)
   @pkColumn  varchar( 50=  ''                              --  主键名称

AS
BEGIN                                                                                    
   DECLARE  @strTemp  varchar( 300)
   DECLARE  @strSql  varchar( 5000)                             --  该存储过程最后执行的语句
   DECLARE  @strOrderType  varchar( 1000)                     --  排序类型语句 (order by column asc或者order by column desc)

   BEGIN
     IF  @bitOrderType  =  1                                         --  降序
       BEGIN
         SET  @strOrderType  =  '  ORDER BY  ' + @ascColumn + '  DESC '
         SET  @strTemp  =  ' <(SELECT min '
       END
     ELSE                                                                       --  升序
       BEGIN
         SET  @strOrderType  =  '  ORDER BY  ' + @ascColumn + '  ASC '
         SET  @strTemp  =  ' >(SELECT max '
       END

     IF  @currentPage  =  1                                                 --  第一页
       BEGIN
         IF  @condition  !=  ''
           SET  @strSql  =  ' SELECT TOP  ' + STR( @pageSize) + '   ' + @columns + '  FROM  ' + @tableName +
             '  WHERE  ' + @condition + @strOrderType
         ELSE
           SET  @strSql  =  ' SELECT TOP  ' + STR( @pageSize) + '   ' + @columns + '  FROM  ' + @tableName + @strOrderType
       END

     ELSE                                                                       --  其他页
       BEGIN
         IF  @condition  != ''
           SET  @strSql  =  ' SELECT TOP  ' + STR( @pageSize) + '   ' + @columns + '  FROM  ' + @tableName +
           '  WHERE  ' + @condition + '  AND  ' + @pkColumn + @strTemp + ' ( ' + @pkColumn + ' ) ' + '  FROM (SELECT TOP  ' + STR(( @currentPage - 1) * @pageSize) +
           '   ' + @pkColumn + '  FROM  '  +  @tableName  +  '  where  '  +  @condition + @strOrderType + ' ) AS TabTemp) ' + @strOrderType
         ELSE
           SET  @strSql  =  ' SELECT TOP  ' + STR( @pageSize) + '   ' + @columns + '  FROM  ' + @tableName +
           '  WHERE  ' + @pkColumn + @strTemp + ' ( ' + @pkColumn + ' ) ' + '  FROM (SELECT TOP  ' + STR(( @currentPage - 1) * @pageSize) + '   ' + @pkColumn +
           '  FROM  ' + @tableName + @strOrderType + ' ) AS TabTemp) ' + @strOrderType
       END

   END
  
   EXEC ( @strSql)
END 

 

执行代码如下:

--   Test Employees Table on Northwind database
EXEC spGetPageOfRecords  52' EmployeeID, LastName, FirstName, Title, City, Region, Country '' Employees '''' EmployeeID '0' EmployeeID '


--   Test Customers Table on Northwind database
EXEC spGetPageOfRecords  106' CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, Country '' Customers '''' CustomerID '0' CustomerID '

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值