翻页功能的存储过程

CREATE PROCEDURE sp_pageChanged
(
 @tblName VARCHAR(255),              --   表名
 @returnColumns VARCHAR(1000) = '*', --   需要返回的列  
 @sortColumn VARCHAR(255) = '',      --   排序的字段名
 @PageSize INT = 40,                 --   页尺寸
 @PageIndex INT = 1,                 --   页码
 @doCount BIT = 0,     --   返回记录总数,   非   0   值则返回
 @OrderType BIT = 0,     --   设置排序类型,   非   0   值则降序
 @strWhere VARCHAR(1500) = ''  --   查询条件   (注意:   不要加   where)
)
AS
/****************************************************
e.g.:
EXEC sp_conn_sort
  'Table1',
  '*',
  'id',
  20,
  4,
  0,
  1,
  ''
****************************************************/

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传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
ELSE
 BEGIN
  IF @OrderType != 0
   BEGIN
    SET @strTmp = ' <(SELECT min'
    SET @strOrder = ' ORDER BY ' + @sortColumn +' DESC'
    --如果@OrderType不是0,就执行降序,这句很重要!
   END
  ELSE
   BEGIN
    SET @strTmp = '> (SELECT MAX'
    SET @strOrder = ' ORDER BY ' + @sortColumn + ' ASC'
   END

  IF @PageIndex = 1
   BEGIN
    IF @strWhere != ''      

     SET @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @returnColumns + ' FROM ' + @tblName +
     ' WHERE ' + @strWhere + ' ' + @strOrder
    ELSE
     SET @strSQL = 'SELECT TOP ' + STR(@PageSize) +' '+ @returnColumns +
     ' FROM   '+ @tblName + ' ' + @strOrder
    --如果是第一页就执行以上代码,这样会加快执行速度
   END
  ELSE
   BEGIN
    --以下代码赋予了@strSQL以真正执行的SQL代码
    SET @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @returnColumns + ' FROM '
      + @tblName + ' WHERE ' + @sortColumn + '' + @strTmp + '(' + @sortColumn + ')
      FROM (SELECT TOP ' + STR((@PageIndex-1)*@PageSize) + ' ' + @sortColumn +
      ' FROM ' + @tblName + '' + @strOrder + ') AS tblTmp)' + @strOrder

    IF @strWhere != ''
      SET @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @returnColumns + ' FROM '
        + @tblName + ' WHERE ' + @sortColumn + '' + @strTmp + '('
        + @sortColumn + ') FROM (SELECT TOP ' + STR((@PageIndex-1)*@PageSize) + ' '
        + @sortColumn + ' FROM ' + @tblName + ' WHERE ' + @strWhere + ' '
        + @strOrder + ') AS tblTmp) AND ' + @strWhere + ' ' +  @strOrder
   END  
 END      

EXEC (@strSQL)

GO 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值