SQL Server 2000和2005通用分页存储过程
-----------------------------------------
--说明:共用分页 适用于SQL Server 2005
--创建人:Jackey
--日期:2007-11-1
--@table varchar(50),--@table 表名或视图名
--@key 主键ID 当@sortExpression为Null时则其值为@key
--@fieldList 要查询的字段
--@filterExpression 条件(需要带字符where)允许传空值
--@sortExpression 排序方式 允许传空值
--@PageSize:每页显示记录数
--@pageindex:当前页
--@isReturnList:0 返回页数 1 返回页数和记录列表
--@RecordCount:返回总记录数
-----------------------------------------
ALTER procedure [dbo].[sp_DataPerPage]
(
@table varchar(50),
@key varchar(20),
@fieldList varchar(256),
@filterExpression varchar(8000),
@sortExpression varchar(100),
@pagesize int,
@pageindex int,
@isReturnList bit,
@RecordCount int output
)
AS
SET nocount on
IF(@sortExpression = '') SET @sortExpression = @key + ' desc'
create table #tb
(
rows int
)
EXEC ('insert into #tb SELECT count(*) from ' + @table +' '+ @filterExpression)
SELECT @RecordCount=rows from #tb --利用临时表来动态赋值记录统计数
drop table #tb
IF(@isReturnList=1)
BEGIN
DECLARE @MinPage int, @MaxPage int
SET @MinPage = (@pageindex - 1) * @PageSize + 1
SET @MaxPage = @MinPage + @PageSize-1
EXEC('select * from (select '+@fieldList+',Row_Number() over(Order By '+@sortExpression+') as RowNumber from '+@table+' '+@filterExpression+') as a where RowNumber between '+@MinPage+' and '+@MaxPage)
END
-----------------------------------------
--说明:共用分页 适用于SQL Server 2000
--创建人:Jackey
--日期:2007-11-1
--@table varchar(50),--@table 表名或视图名
--@key 主键ID 当@sortExpression为Null时则其值为@key
--@fieldList 要查询的字段
--@filterExpression 条件(需要带字符where)允许传空值
--@sortExpression 排序方式 允许传空值
--@PageSize:每页显示记录数
--@pageindex:当前页
--@isReturnList:0 返回页数 1 返回页数和记录列表
--@RecordCount:返回总记录数
-----------------------------------------
Create procedure [dbo].[sp_page]
(
@table varchar(50),
@key varchar(20),
@selectcolumns varchar(256),
@orderbycolumn varchar(20),
@orderDescOrAsc varchar(5),
@pagesize int,
@pageindex int,
-- @docount bit,
@sqlWhere varchar(8000),
@RecordCount int output
)
as
set nocount on
declare @sql varchar(8000)
--declare @RecordCount int
declare @abDerection varchar(10)
if @orderDescOrAsc = 'ASC'
set @abDerection = ' DESC '
else
set @abDerection = ' ASC '
create table #tb
(
rows int
)
set @sql = 'insert into #tb select count(*) from ' + @table + @sqlWhere
exec (@sql)
select @RecordCount=rows from #tb --利用临时表来动态赋值记录统计数
drop table #tb
--if(@docount=1)
--select @RecordCount
--else
-- begin
if(@pageindex=1)
exec('select top ' + @pagesize + ' ' + @selectcolumns + ' from ' + @table + @sqlWhere + ' order by ' + @orderbycolumn + ' ' + @orderDescOrAsc)
else
begin
declare @PageUpperBound int
declare @endrecords int
set @PageUpperBound=@pageindex*@pagesize
if(@PageUpperBound-@pagesize)>=@RecordCount
select ''
else if(@RecordCount-(@PageUpperBound-@pagesize)<=@pagesize)
begin
set @endrecords=@RecordCount-(@PageUpperBound-@pagesize)
exec('select ' + @selectcolumns + ' from
(select top ' + @endrecords + ' ' + @selectcolumns + ' from ' + @table + @sqlWhere + ' ' + ' order by ' + @orderbycolumn + ' ' + @abDerection + ')A
order by '+ @orderbycolumn + ' ' + @orderDescOrAsc)
end
else
exec('select ' + @selectcolumns + ' from
(select top ' + @pagesize + ' * from (
select top ' + @PageUpperBound + ' ' + @selectcolumns + ' from ' + @table + @sqlWhere + ' ' +' order by '+ @orderbycolumn +' ' + @orderDescOrAsc + ')A
order by ' + @orderbycolumn + ' ' + @abDerection + ')B order by '+ @orderbycolumn + ' ' + @orderDescOrAsc)
end
-- end

浙公网安备 33010602011771号