最通用的分页存储过程

来源:互联网 发布:三个矩阵乘法结合律 编辑:程序博客网 时间:2024/04/29 03:21
 
  1. -- 最通用的分页存储过程    
  2. -- 获取指定页的数据      
  3. -- Powered By:CHENQP   
  4. -- Modify Date:17:08 2006-9-15   
  5. CREATE PROCEDURE usp_Pagination     
  6.     @tblName   varchar(255),       -- 表名      
  7.     @strGetFields varchar(1000) = '*',  -- 需要返回的列    
  8.     @fldName varchar(255)='',      -- 排序的字段名      
  9.     @PageSize   int = 10,          -- 页尺寸    
  10.     @PageIndex  int = 1,           -- 页码     
  11.     @doCount  bit = 0,   -- 返回记录总数, 非 0 值则返回    
  12.     @OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序     
  13.     @strWhere  varchar(1500) = ''  -- 查询条件 (注意: 不要加 where)     
  14. AS     
  15. declare @strSQL   varchar(5000)       -- 主语句     
  16. declare @strTmp   varchar(110)        -- 临时变量     
  17. declare @strOrder varchar(400)        -- 排序类型     
  18. if @doCount != 0     
  19.  begin      
  20.    if @strWhere !=''     
  21.     set @strSQL = 'select count(*) as Total from ['+ @tblName +'] where '+ @strWhere     
  22.    else     
  23.     set @strSQL = 'select count(*) as Total from ['+ @tblName +']'    
  24.  end     
  25.  --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都    
  26. --是@doCount为0的情况     
  27.  else     
  28.  begin     
  29.  if @OrderType != 0     
  30.      begin     
  31.         set @strTmp = '<(select min'     
  32.         set @strOrder = ' order by ['+ @fldName +'] desc'    
  33.      --如果@OrderType不是0,就执行降序,这句很重要!     
  34.      end     
  35.  else     
  36.     begin     
  37.     set @strTmp = '>(select max'    
  38.     set @strOrder = ' order by ['+ @fldName +'] asc'    
  39.  end     
  40.     
  41. if @PageIndex = 1     
  42.     begin     
  43.         if @strWhere != ''       
  44.             set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '   from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder     
  45.          else     
  46.              set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '   from ['+ @tblName +'] '+ @strOrder     
  47.             --如果是第一页就执行以上代码,这样会加快执行速度     
  48.         end     
  49.     else      
  50.         begin     
  51.         --以下代码赋予了@strSQL以真正执行的SQL代码     
  52.             set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '   from [' + @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])     
  53.                  from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + 'from ['+ @tblName +']' + @strOrder + 'as tblTmp)'+ @strOrder     
  54.             if @strWhere != ''     
  55.                set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '   from ['+ @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']     
  56.                  from ['+ @tblName +'where ' + @strWhere + ' ' + @strOrder + 'as tblTmp) and ' + @strWhere + ' ' + @strOrder     
  57.             end     
  58.         end       
  59.  exec ( @strSQL)    
  60. GO<PRE></PRE>  
原创粉丝点击