SQLServer2005 分页程序

 

None.gif set  ANSI_NULLS  ON
None.gif
set  QUOTED_IDENTIFIER  ON
None.gif
go
None.gif
None.gif
None.gif
None.gif
ALTER   PROCEDURE   [ dbo ] . [ DividePage ]
None.gif  
@tabname   nvarchar ( 2000 ), -- 要查询表名
None.gif
   @fidlelist   nvarchar ( 1000 ), -- 要查询字段
None.gif
   @wheresql   nvarchar ( 1000 ), -- 查询条件
None.gif
   @pk   nvarchar ( 20 ), -- 主键
None.gif
   @order   nvarchar ( 100 ), -- 排序字段
None.gif
   @pagenum   int , -- 要查询的页号
None.gif
   @rowsum   int , -- 每页要显示的行数
None.gif
   @allpage   int  output, -- 计算总页数
None.gif
   @allrow   int  output -- 计算总行数
None.gif
AS
None.gif  
declare   @sqlstr   nvarchar ( 4000 ), @tmpwhere   nvarchar ( 4000 ), @tmporder   nvarchar ( 100 )
None.gif
BEGIN
None.gif    
if ( @order != '' )
None.gif      
begin
None.gif       
set   @tmporder = @order
None.gif      
end  
None.gif     
else
None.gif       
set   @tmporder = @pk ;
None.gif    
set   @tmpwhere = '' ;
None.gif    
if ( @wheresql != '' )
None.gif    
begin
None.gif       
set   @tmpwhere = '  where  ' + @wheresql ;
None.gif    
end
None.gif    
set   @sqlstr = N ' select * from(select   ' + @fidlelist + ' , ROW_NUMBER() OVER(order by  ' + @tmporder + ' ) as row from  ' + @tabname + @tmpwhere + ' ) tmp where row between  ' + cast ((( @pagenum - 1 ) * @rowsum + 1 as   nvarchar ) + '  and  ' + cast ( @pagenum * @rowsum   as   nvarchar );  
None.gif
exec  sp_executesql  @sqlstr
None.gif    
set   @sqlstr = N ' select @allrow1 =count( ' + @pk + ' ) from  ' +   @tabname + @tmpwhere
None.gif    
exec  sp_executesql  @sqlstr ,N ' @allrow1 int OUTPUT ' , @allrow1 = @allrow  output    
None.gif    
if ( @allrow % @rowsum <> 0 )
None.gif        
begin
None.gif          
set   @allpage = @allrow / @rowsum + 1 -- 获得总页数
None.gif
         end
None.gif    
else
None.gif          
set   @allpage = @allrow / @rowsum   -- --获得总页数
None.gif

None.gif
END

关键的函数ROW_NUMBER() 是sqlserver 2000 中没有的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值