数据库的分页方法总结
2009-11-17 16:57
302 查看
==============================================================================================
通用型分页(sql server ,access……)
declare @pageCount int,@pageNum int ,@pageRows int
set @pageNum =15
set @pageRows=20
set @pageCount =Ceiling( (select count(0) from table_name) *1.0/ @pageRows )
select top (@pageRows)* from table_name where I_Id not in (select top ((@pageNum-1)*@pageRows) table_name from Lm_wuzi)order by I_Id
select @pageCount
==============================================================================================
sql server 2005 专用(2005的函数)
create proc [dbo].[my_pages]
@pageSize int =20,
@pageNO int =1,
@pageCount int output,
@strWhere nvarchar(1000)=''
as
set noCount on
begin
if(@pageNo< 1 or @pageSize <1)
begin
raiserror ('分页数值无效',16,1)
return -1
end
--返回总页数
declare @allPage int
declare @countSql nvarchar(1000),@sql nvarchar(4000)
set @countSql = 'select @allPage = count(*) from table_name where 1=1' + @strWhere
exec sp_executesql @countSql,N'@allPage int output',@allPage output
set @pageCount =Ceiling( @allPage *1.0/ @pageRows )
set @sql='SELECT * from (select *,ROW_NUMBER() Over(order by I_Id) as rowNum from table_name where 1=1'+ @strWhere+') as myTable WHERE rowNum between @PageSize*(@pageNo - 1)+1 and @pageSize * @pageNo'
exec sp_executesql @sql ,N'@PageSize int,@pageNo int',@PageSize,@pageNo
end
end
==============================================================================================
sql server 数据库通用型(内存表)
create proc [dbo].[MY_pages]
@pageSize int =20,
@pageNO int =1,
@pageCount int output,
@strWhere nvarchar(1000)
as
set noCount on
begin
if(@pageNo< 1 or @pageSize <1)
begin
raiserror ('分页数值无效',16,1)
return -1
end
create table #temp(tid int identity(1,1),pid int)
declare @sql nvarchar(2000)
set @sql='insert into #temp (pid) select I_id from table_name where 1=1'
if(@strWhere <> '')
set @sql = @sql +@strWhere
exec sp_executesql @sql
set @pageCount =Ceiling( @@rowcount * 1.0/ @pageSize)
if (@pageNo >@pageCount)
begin
set @pageNo = @pageCount
end
declare @startNo int,@endNo int
set @startNo = @PageSize*(@pageNo - 1)+1
set @endNo = @pageSize * @pageNo
select * from table_name as b,#temp as c where b.I_id=c.pid and c.tid between @startNo and @endNo
drop table #temp
end
通用型分页(sql server ,access……)
declare @pageCount int,@pageNum int ,@pageRows int
set @pageNum =15
set @pageRows=20
set @pageCount =Ceiling( (select count(0) from table_name) *1.0/ @pageRows )
select top (@pageRows)* from table_name where I_Id not in (select top ((@pageNum-1)*@pageRows) table_name from Lm_wuzi)order by I_Id
select @pageCount
==============================================================================================
sql server 2005 专用(2005的函数)
create proc [dbo].[my_pages]
@pageSize int =20,
@pageNO int =1,
@pageCount int output,
@strWhere nvarchar(1000)=''
as
set noCount on
begin
if(@pageNo< 1 or @pageSize <1)
begin
raiserror ('分页数值无效',16,1)
return -1
end
--返回总页数
declare @allPage int
declare @countSql nvarchar(1000),@sql nvarchar(4000)
set @countSql = 'select @allPage = count(*) from table_name where 1=1' + @strWhere
exec sp_executesql @countSql,N'@allPage int output',@allPage output
set @pageCount =Ceiling( @allPage *1.0/ @pageRows )
set @sql='SELECT * from (select *,ROW_NUMBER() Over(order by I_Id) as rowNum from table_name where 1=1'+ @strWhere+') as myTable WHERE rowNum between @PageSize*(@pageNo - 1)+1 and @pageSize * @pageNo'
exec sp_executesql @sql ,N'@PageSize int,@pageNo int',@PageSize,@pageNo
end
end
==============================================================================================
sql server 数据库通用型(内存表)
create proc [dbo].[MY_pages]
@pageSize int =20,
@pageNO int =1,
@pageCount int output,
@strWhere nvarchar(1000)
as
set noCount on
begin
if(@pageNo< 1 or @pageSize <1)
begin
raiserror ('分页数值无效',16,1)
return -1
end
create table #temp(tid int identity(1,1),pid int)
declare @sql nvarchar(2000)
set @sql='insert into #temp (pid) select I_id from table_name where 1=1'
if(@strWhere <> '')
set @sql = @sql +@strWhere
exec sp_executesql @sql
set @pageCount =Ceiling( @@rowcount * 1.0/ @pageSize)
if (@pageNo >@pageCount)
begin
set @pageNo = @pageCount
end
declare @startNo int,@endNo int
set @startNo = @PageSize*(@pageNo - 1)+1
set @endNo = @pageSize * @pageNo
select * from table_name as b,#temp as c where b.I_id=c.pid and c.tid between @startNo and @endNo
drop table #temp
end
相关文章推荐
- 数据库分页方法总结
- 不同数据库的分页查询实现方法总结
- YII2-数据库数据查询方法,关联查询with, joinWith区别和分页
- MySQL学习笔记之数据定义表约束,分页方法总结
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结
- MySQL分页技术、6种分页方法总结
- MySQL分页技术、6种分页方法总结
- 三大数据库分页方法
- MySQL 数据库中删除重复记录的方法总结
- 【转载】C#连接数据库及读取数据库中字段的简单方法总结
- MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
- 常用数据库工具方法总结
- asp.net 数据库查询方法总结 摘
- 用http 中doGet 方法获取mysql 数据库数据的错误总结
- Yii 分页方法总结
- 数据库高并发解决方法总结
- (转)各种数据库的连接串(总结DSN的使用方法)
- 数据库分页查询方法
- YII2-数据库数据查询方法,关联查询with, joinWith区别和分页