实现千万级数据的分页显示数据库教程

| 收藏本文 下载本文 作者:allenchuan

下面小编为大家整理了实现千万级数据的分页显示数据库教程(共含4篇),欢迎阅读与借鉴!同时,但愿您也能像本文投稿人“allenchuan”一样,积极向本站投稿分享好文章。

实现千万级数据的分页显示数据库教程

篇1:实现千万级数据的分页显示数据库教程

分页|数据|显示

这是经我该写后的存储过程

---------------------------------------------------------

ALTER      PROCEDURE usp_GetRecordFromPage

@tblName     varchar(1000),      -- 表名

@SelectFieldName  varchar(4000),             -- 要显示的字段名(不要加select)

@strWhere     varchar(4000),             -- 查询条件(注意: 不要加 where)

@OrderFieldName     varchar(255),              -- 排序索引字段名

@PageSize     int ,               -- 页大小

@PageIndex    int = 1,                -- 页码

@iRowCount    int output,                -- 返回记录总数

@OrderType    bit = 0                -- 设置排序类型, 非 0 值则降序

AS

declare @strSQL   varchar(4000)      -- 主语句

declare @strTmp   varchar(4000)       -- 临时变量

declare @strOrder varchar(400)       -- 排序类型

declare @strRowCount   nvarchar(4000)     -- 用于查询记录总数的语句

set @OrderFieldName=ltrim(rtrim(@OrderFieldName))

if @OrderType != 0

begin

set @strTmp = '<(select min'

set @strOrder = ' order by ' + @OrderFieldName +' desc'

end

else

begin

set @strTmp = '>(select max'

set @strOrder = ' order by ' + @OrderFieldName +' asc'

end

set @strSQL = 'select top ' + str(@PageSize) + @SelectFieldName+' from '

+ @tblName + ' where ' + @OrderFieldName + @strTmp + '('

+ right(@OrderFieldName,len(@OrderFieldName)-charindex('.',@OrderFieldName)) + ') from (select top ' + str((@PageIndex-1)*@PageSize)

+ @OrderFieldName + ' from ' + @tblName + @strOrder + ') as tblTmp)'

+ @strOrder

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) + @SelectFieldName+' from '

+ @tblName + ' where ' + @OrderFieldName + @strTmp + '('

+ right(@OrderFieldName,len(@OrderFieldName)-charindex('.',@OrderFieldName)) + ') from (select top ' + str((@PageIndex-1)*@PageSize)

+ @OrderFieldName + ' from ' + @tblName + ' where ' + @strWhere + ' '

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1

begin

set @strTmp = ''

if @strWhere != ''

set @strTmp = ' where ' + @strWhere

set @strSQL = 'select top ' + str(@PageSize) + @SelectFieldName+' from '

+ @tblName + @strTmp + ' ' + @strOrder

end

exec(@strSQL)

if @strWhere!=''

begin

set @strRowCount = 'select @iRowCount=count(*) from ' + @tblName+' where '+@strWhere

end

else

begin

set @strRowCount = 'select @iRowCount=count(*) from ' + @tblName

end

exec sp_executesql @strRowCount,N'@iRowCount int out',@iRowCount out

篇2:[]数据库实现分页查询显示

现在一般用的比较多的数据库,应该是Oracle,MSSQL(T sql),mysql,但是他们并没有统一的标准来实现分页查询,也就是没有统一的SQL标准,所以他们三个方法各不同给编码人员造成了很大的不便,先总结一下,与大家共享!

Mysql 是最简单的,就是使用Limit进行查询。例如:select * from tmp_table limit 10,20;也就是从tmp_table表中查找(10,20)之间的元组。Oracle 也基本上实现了这种方法,但是形式却有所不同。例如:select * from tmp_table where rownum>=10 and rownum<=20;也就是从tmp_table表中查找(10,20)之间的元组。MSSQL(T SQL)只有TOP,也就是取出一个表中的头部的N条元组,但是没有直接可以取出N到M之间的数据的方法,所以这里要自己开发。例如上面是实现了每页10个数据,然后取出(10,20)之间的数据(也就是第二页),MSSQL这么实现:select * from 

 

  

  

select top 10 * from 

  

  

 

  

  

  

  

select top 20 * from tmp_table order by id 

  

  

) order by id 

DESC)order by id ASC;其实这里原理应该是比较简单的,因为我们要取出(10,20)之间的元组,先取出前20条,然后降序取出前10条,然后升序取出全部的,也就实现了升序取出(10,20)元组了,显然,这也是因为SQL的标准并不是很严格的缘故吧,所以很多的数据库的实现方式都不同,但是经过我们对SQL标准的学习,我们应该是可以总结出相同的方法的。

篇3:分页存储过程(用存储过程实现数据库的分页代码)数据库教程

复制代码代码如下:

--*******************************************************

--* 分页存储过程 *

--* 撒哈拉大森林 *

--* -6-28 *

--*******************************************************

if exists(select * from sysobjects where type='P' and name=N'P_Paging')

drop procedure P_Paging

go

create procedure P_Paging

@SqlStr nvarchar(4000), --查询字符串

@CurrentPage int, --第N页

@PageSize int --每页行数

as

set nocount on

declare @P1 int, --P1是游标的id

@rowcount int

exec sp_cursoropen @P1 output,@SqlStr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output

select ceiling(1.0*@rowcount/@PageSize) as 总页数--,@rowcount as 总行数,@CurrentPage as 当前页

set @CurrentPage=(@CurrentPage-1)*@PageSize+1

exec sp_cursorfetch @P1,16,@CurrentPage,@PageSize

exec sp_cursorclose @P1

set nocount off

go

----创建测试表

--if exists(select * from sysobjects where type='U' and name=N'Test_Students')

-- drop table Test_Students

--go

--create table Test_Students(

-- id int IDENTITY(1,1) not null,

-- name nvarchar(100) not null

--)

--

----创建测试数据

--declare @i int

--set @i = 100000

--while @i>0

-- begin

-- insert into Test_Students values('姓名')

-- set @i = @i - 1

-- end

--

----执行存储过程

--exec P_Paging 'select * from Test_Students order by id',100,100 --执行

--

----删除测试表

--if exists(select * from sysobjects where type='U' and name=N'Test_Students')

-- drop table Test_Students

--go

篇4:ASP实现access随机显示不重复记录解决方案数据库教程

以下为引用的内容:

<%

'-------------------------数据库连接-----------------------

Set bjConn = Server.CreateObject(“ADODB.Connection”)

objConn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;” &_

“Data Source=” & Server.MapPath(“data.mdb”)

objConn.Open

'-------------------------数据库连接-----------------------

'-------------------------检索数据-----------------------

strSQL = “SELECT id,DataColumn FROM DataTable”

'Sql语句,检索数据库

Set bjRS = Server.CreateObject(“ADODB.Recordset”)

'创建记录集

objRS.Open strSQL, objConn, 1, 1

'执行检索

Count=objRS.RecordCount

'得到记录总数

Item=4

'显示记录数

'-------------------------检索数据-----------------------

'-------------------------------------------------------------------------------

redim a(Item, 2),t(Count)

'定义2数组,数组a用来储存记录,数组t用来删选记录

'---------------------------------------

'初始数组数值,目的为了插入数据以后和此值做比较

for each j in t

j=0

next

'---------------------------------------

'---------------------------------------

' 随机抽取记录号

Randomize timer      '初始化随机数生成器

for j=1 to Item

k=int(rnd*Count+1)  '从总数里面随机取一条记录

do while t(k)0              '判断是否记录是否已经在数组中

k=int(rnd*Item+1)

loop

t(k)=1        '第k条记录被选中

next

'--------------------------------------

j=1:i=1'定义下标

'--------------------------------------

' 循环选取数据集objRS中的部分记录存放到数组中

Do While Not objRS.Eof

if t(j)=1 then

a(i,1)=objRS(“id”)          '记录id

a(i,2)=objRS(“DataColumn”) '记录内容

i=i+1

end if

j=j+1

objRS.MoveNext

Loop

'--------------------------------------

'-------------------------------------------------------------------------------

'----------------------------显示内容--------------------

for i=1 to Item

Response.write “序号”&a(i,1)&“

Response.write “内容”&a(i,2)&“

next

'----------------------------显示内容--------------------

'---------------------------

'释放资源

objRs.Close

set bjRs=nothing

objConn.Close

set bjConn=nothing

'---------------------------

%>

如何实现100%的动态数据管道(二)数据库教程

如何实现100%的动态数据管道(三)数据库教程

SQLSERVER Pager store procedure分页存储过程数据库教程

远程管理SQL数据的方法数据库教程

ChangeAllObjectOwner数据库教程

为下拉式数据窗口建立缓冲区数据库教程

Excel 访问远程数据的四种方法数据库教程

项目管理数据库教程

复制监视器数据库教程

组合查询数据库教程

实现千万级数据的分页显示数据库教程(通用4篇)

欢迎下载DOC格式的实现千万级数据的分页显示数据库教程,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档