/*============================================================
* 名称:存储过程 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