SQL

/*============================================================
 * 名称:存储过程 up_DataByPage
 * 作者:Leo
 * 时间:2007-7-24
 * 用途:用于 数据分页
 ============================================================*/

CREATE Procedure up_DataByPage
(
 @tableName varchar(100), --表名 
 @orderColumnName varchar(100), --排序列名
 @columns varchar(100),--要检索的列名
     @whereExp varchar(1000),--查询条件
 @PageIndex Int,  --当前页码编号(从1开始计算)
 @PageSize  Int,  --每页包含的记录数
 @RecordCount Int Out, --总记录数
 @PageCount Int Out    --总页数
)
As
begin
--计算总记录数
declare @sql1 nvarchar(1000)
 set @sql1=N'select @RecordCount=Count(*)'+N' from '+@tableName
 exec sp_executesql @sql1,N'@RecordCount int output',@RecordCount output
--计算总页数
Set @PageCount = Ceiling(@RecordCount * 1.0 / @PageSize)
end
begin
--声明保存sql语句的变量
Declare @sql Nvarchar(1000)

--sql语句分析:
--Select * From (Select Top  每页记录数  * From (Select Top 当前页码*每页记录数  显示的字段  From 表) 新表名一 Order By 关键字 Desc) 新表名二 Order By 关键字

If @PageIndex < @PageCount
 Set @sql = 'Select * From (Select Top  ' + Str( @PageSize ) + ' * From ( Select Top ' + Str(@PageSize * @PageIndex ) + ' ' + @columns +
   ' From ' +  @tableName + @whereExp + '  Order By ' + @orderColumnName + ' desc) Temp_1 ORDER BY ' + @orderColumnName + ') Temp_2 Order By ' + @orderColumnName + ' desc'
Else
 Set @sql = 'Select * From (Select Top  ' + Str( @RecordCount-(@PageIndex-1)*@PageSize ) + ' * From ( Select Top ' + Str( @RecordCount ) + ' ' + @columns +
   ' From ' +  @tableName + @whereExp + ' Order By ' + @orderColumnName +  ' desc) Temp_1 ORDER BY ' + @orderColumnName + ' ) Temp_2 Order By ' + @orderColumnName + ' desc'
EXEC (@sql)
end
GO
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值