实现分页的通用存储过程(第二种)
2011-05-17 14:15
441 查看
if object_id('spPage')is not null drop proc spPage
go
CREATE PROCEDURE spPage
(
@pageSize int, ----每页显示的记录个数
@pageIndex int, ----要显示哪一页的记录
@pageStart int, ----第一页(1:表示指向第一页)
@pageEnd int ----最后一页(1:表示指向最后一页)
)
AS
DECLARE @Counts INT
DECLARE @pageUp INT
DECLARE @pageDown INT
--获得总记录数
select @Counts=rows from sysindexes where id = object_id('AIp') and indid in (0,1)
--当前页的第一条记录RowID
SET @pageDown = @pageSize * (@pageIndex - 1) + 1
--当前页的最后一条记录RowID
SET @pageUp = @pageSize * @pageIndex
--获取分页后的数据
if @pageStart=1---指向第一页
begin
select top (@pageSize)* from AIp
end
else
if @pageEnd=1 ---指向最后一页
begin
if @Counts%@pageSize=0
begin
SELECT T.* FROM (SELECT id , RowID = ROW_NUMBER () OVER (ORDER BY id asc)
FROM AIp --Ip表名
) AS PageTableList JOIN AIp --Ip表名
AS T ON T.id = PageTableList.id --没有主键此句删除
WHERE RowID > @pageSize*(@Counts/@pageSize-1)-- BETWEEN @pageDown AND @pageUp
ORDER BY T.id asc --没有主键此句删除
end
else
begin
SELECT T.* FROM (SELECT id , RowID = ROW_NUMBER () OVER (ORDER BY id asc)
FROM AIp --Ip表名
) AS PageTableList JOIN AIp --Ip表名
AS T ON T.id = PageTableList.id --没有主键此句删除
WHERE RowID >@pageSize*(@Counts/@pageSize)
end
end
else
if @pageStart=0 and @pageEnd=0
begin
SELECT T.* --没有主键此处不用 T.
FROM
(
SELECT id ,--没有主键此处改用 *
RowID = ROW_NUMBER () OVER (ORDER BY id asc)
FROM AIp --Ip表名
) AS PageTableList JOIN AIp --Ip表名
AS T ON T.id = PageTableList.id --没有主键此句删除
WHERE RowID BETWEEN @pageDown AND @pageUp
ORDER BY T.id asc --没有主键此句删除
end
-------------------------------------------------------------------------------
exec spPage @pageSize=5,@pageIndex=3,@pageStart=0,@pageEnd=0
go
CREATE PROCEDURE spPage
(
@pageSize int, ----每页显示的记录个数
@pageIndex int, ----要显示哪一页的记录
@pageStart int, ----第一页(1:表示指向第一页)
@pageEnd int ----最后一页(1:表示指向最后一页)
)
AS
DECLARE @Counts INT
DECLARE @pageUp INT
DECLARE @pageDown INT
--获得总记录数
select @Counts=rows from sysindexes where id = object_id('AIp') and indid in (0,1)
--当前页的第一条记录RowID
SET @pageDown = @pageSize * (@pageIndex - 1) + 1
--当前页的最后一条记录RowID
SET @pageUp = @pageSize * @pageIndex
--获取分页后的数据
if @pageStart=1---指向第一页
begin
select top (@pageSize)* from AIp
end
else
if @pageEnd=1 ---指向最后一页
begin
if @Counts%@pageSize=0
begin
SELECT T.* FROM (SELECT id , RowID = ROW_NUMBER () OVER (ORDER BY id asc)
FROM AIp --Ip表名
) AS PageTableList JOIN AIp --Ip表名
AS T ON T.id = PageTableList.id --没有主键此句删除
WHERE RowID > @pageSize*(@Counts/@pageSize-1)-- BETWEEN @pageDown AND @pageUp
ORDER BY T.id asc --没有主键此句删除
end
else
begin
SELECT T.* FROM (SELECT id , RowID = ROW_NUMBER () OVER (ORDER BY id asc)
FROM AIp --Ip表名
) AS PageTableList JOIN AIp --Ip表名
AS T ON T.id = PageTableList.id --没有主键此句删除
WHERE RowID >@pageSize*(@Counts/@pageSize)
end
end
else
if @pageStart=0 and @pageEnd=0
begin
SELECT T.* --没有主键此处不用 T.
FROM
(
SELECT id ,--没有主键此处改用 *
RowID = ROW_NUMBER () OVER (ORDER BY id asc)
FROM AIp --Ip表名
) AS PageTableList JOIN AIp --Ip表名
AS T ON T.id = PageTableList.id --没有主键此句删除
WHERE RowID BETWEEN @pageDown AND @pageUp
ORDER BY T.id asc --没有主键此句删除
end
-------------------------------------------------------------------------------
exec spPage @pageSize=5,@pageIndex=3,@pageStart=0,@pageEnd=0
相关文章推荐
- TOP n 实现的通用分页存储过程
- TOP n 实现的通用分页存储过程
- 使用系统存储过程实现的通用分页存储过程
- TOP n 实现的通用分页存储过程(转自邹建)
- SQL Server2000 索引结构及其使用 (实现小数据量和海量数据的通用分页显示存储过程)
- 实现小数据量和海量数据的通用分页显示存储过程
- 使用系统存储过程实现的通用分页存储过程
- --TOP n 实现的通用分页存储过程(转自邹建)
- 实现海量数据和小数据量的通用分页显示存储过程
- 字符串缓存实现的通用分页存储过程(转自邹建)
- 实现小数据量和海量数据的通用分页显示存储过程
- SQL 使用系统存储过程实现的通用分页存储过程
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- 字符串缓存实现的通用分页存储过程
- 海量数据库的查询优化及分页算法方案(二)-实现小数据量和海量数据的通用分页显示存储过程 [转]
- 通用ORACLE 分页查询语句,存储过程实现
- 实现小数据量和海量数据的通用分页显示存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)