sql2005分页存储过程

MSSQL2005

复制代码
set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go






ALTER   PROCEDURE   [ dbo ] . [ PROCE_SQL2005PAGECHANGE ]
(
 
@TableName   varchar ( 50 ),             -- 表名
  @ReFieldsStr   varchar ( 200 =   ' * ' ,    -- 字段名(全部字段为*)
  @OrderString   varchar ( 200 ),          -- 排序字段(必须!支持多字段不用加order by)
  @WhereString   varchar ( 500 = N '' ,   -- 条件语句(不用加where)
  @PageSize   int ,                      -- 每页多少条记录
  @PageIndex   int   =   1  ,                -- 指定当前为第几页
  @TotalRecord   int  output             -- 返回总记录数
)
AS
 
BEGIN     

    
-- 处理开始点和结束点
     Declare   @StartRecord   int ;
    
Declare   @EndRecord   int
    
Declare   @TotalCountSql   nvarchar ( 500 ); 
    
Declare   @SqlString   nvarchar ( 2000 );    
    
set   @StartRecord   =  ( @PageIndex - 1 ) * @PageSize   +   1
    
set   @EndRecord   =   @StartRecord   +   @PageSize   -   1  
    
SET   @TotalCountSql =  N ' select @TotalRecord = count(*) from  '   +   @TableName ; -- 总记录数语句
     SET   @SqlString   =  N ' (select row_number() over (order by  ' +   @OrderString   + ' ) as rowId, ' + @ReFieldsStr + '  from  ' +   @TableName ; -- 查询语句
     --
     IF  ( @WhereString =   ''   or   @WhereString != null )
        
BEGIN
            
SET   @TotalCountSql = @TotalCountSql   +   '   where  ' +   @WhereString ;
            
SET   @SqlString   = @SqlString +   '   where  ' +   @WhereString ;            
        
END
    
-- 第一次执行得到
     -- IF(@TotalRecord is null)
     --    BEGIN
            EXEC  sp_executesql  @totalCountSql ,N ' @TotalRecord int out ' , @TotalRecord  output; -- 返回总记录数
     --   END
     -- --执行主语句
     set   @SqlString   = ' select * from  '   +   @SqlString   +   ' ) as t where rowId between  '   +   ltrim ( str ( @StartRecord ))  +   '  and  '   +    ltrim ( str ( @EndRecord ));
    
Exec ( @SqlString )    
END
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值