• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
激情 希望 斗志昂扬
Records of growth process 专注微软技术
博客园    首页    新随笔    联系   管理    订阅  订阅

分页存储过程(增加了选择字段列表、排序方式参数)

Code
*
数据库分页存储过程,支持倒序和升序
参数说明:
  
@tablename:为搜索表名
  
@tablefield:为表的字段,约定为表的主键,
  
@where:为搜索表名,要显示所有记录请设为"1=1"
  
@orderby:为搜索结果排序,如order by id desc
  
@fieldlist:为字段列表,如userid, username
  
@curpage:当前页码
  
@page_record:每页记录条数
  
@Sort:排序标识(如果是倒序排,参数值为desc,为升序,参数值为asc,跟orderby参数是对应的)
结果: 返回表tablename中满足条件where的第curpage页的page_record条记录,结果按orderby排序
*/
Create PROCEDURE proc_CommonPaging

@tablename varchar(100),
@tablefield varchar(20),
@where varchar(5000),
@orderby varchar(500),
@fieldlist varchar(1000),
@curpage int,
@page_record int,
@sort varchar(8)

AS

BEGIN

  
DECLARE @cmd varchar(8000)
  
DECLARE @uprecord int
  
DECLARE @Op varchar(2) -- 操作符
  DECLARE @max_min varchar(4) -- 最大/最小计算

  
SET @op = '<'
  
SET @max_min = 'MIN'
  
IF @sort = 'asc'
      
BEGIN
    
SET @Op = '>'
            
SET @max_min = 'MAX'
      
END

  
SET @uprecord=@curpage * @page_record
  
  
IF @curpage = 0
      
SET @cmd = 'Select TOP '+cast(@page_record AS NVARCHAR)+' '+@fieldlist+' FROM '+@tablename+' Where '+@where+' '+@orderby
  
ELSE
    
SET @cmd = 'Select TOP '+cast(@page_record AS NVARCHAR)+' '+@fieldlist+' FROM '+@tablename+' Where '+@where+' AND '+@tablefield+' 
    
'+@op+' (Select '+@max_min+'('+@tablefield+')  FROM (Select TOP  '+cast(@uprecord AS NVARCHAR)+' '+@tablefield+' FROM '+@tablename+' Where 
    
'+@where+' '+@orderby+') AS TmpTbl ) AND '+@where+' '+@orderby

  
SET @cmd = @cmd + '; Select COUNT(*) FROM '+@tablename+' Where '+@where

  
EXEC(@cmd)
  
PRINT(@cmd)

END
GO
posted @ 2009-04-11 21:46  贤  阅读(256)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3