参考了
地址:
IF(EXISTS(SELECT * FROM sysobjects WHERE [id]=OBJECT_ID('usp_PagingLarge') AND xtype='P'))
DROP PROCEDURE usp_PagingLarge
*/
GO
CREATE PROCEDURE usp_PagingLarge
@PageSize INT, --每页记录数
@CurrentPage INT, --当前页,0表示第1页
AS
BEGIN
IF @Fields = ''
SET @Fields = '*'
IF @Filter = ''
SET @Filter = 'WHERE 1=1'
ELSE
SET @Filter = 'WHERE ' + @Filter
IF @Group ''
SET @Group = 'GROUP BY ' + @Group
IF @Order ''
SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')
IF CHARINDEX(' DESC', @Order) 0
IF CHARINDEX(' ASC', @Order) 0
IF CHARINDEX(' DESC', @Order) CHARINDEX(' ASC', @Order)
SET @Operator = '='
END
SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')
SET @pos1 = CHARINDEX(',', @SortColumn)
IF @pos1 0
SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)
SET @SortTable = @TableNames
SET @SortName = @SortColumn
SET @SortColumn = @PrimaryKey
SET @Order = @SortColumn
DECLARE @prec int
SELECT @type=t.name, @prec=c.prec
FROM sysobjects o
JOIN syscolumns c on o.id=c.id
JOIN systypes t on c.xusertype=t.xusertype
WHERE o.name = @SortTable AND c.name = @SortName
IF CHARINDEX('char', @type) 0
SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
DECLARE @TopRows INT
SET @TopRows = @PageSize * @CurrentPage + 1
print @TopRows
print @Operator
EXEC('
DECLARE @SortColumnBegin ' + @type + '
SET ROWCOUNT ' + @TopRows + '
SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
SET ROWCOUNT ' + @PageSize + '
')
--调用例子:
--1.单表/单排序
与自定义分页结合例子:
/Files/jiny-z/Paging_Custom.rar
alter PROCEDURE SP_Pagination
/**//*
***************************************************************
** 分页存储过程 **
参数说明:
①Tables :表名称,视图
***************************************************************/
(
@Tables varchar(1000),
@PrimaryKey varchar(100),
@CurrentPage int = 1,
@PageSize int = 10,
@Fields varchar(1000) = '*',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL,
@docount bit = 0
)
/**//*默认排序*/
IF @Sort IS NULL OR @Sort = ''
SET @Sort = @PrimaryKey
DECLARE @SortTable varchar(100)
DECLARE @SortName varchar(100)
DECLARE @type varchar(100)
/**//*设定排序语句.*/
IF CHARINDEX('DESC',@Sort)0
SET @strSortColumn = REPLACE(@Sort, 'DESC', '')
SET @operator = '='
IF CHARINDEX('ASC', @Sort) = 0
SET @strSortColumn = REPLACE(@Sort, 'ASC', '')
IF CHARINDEX('.', @strSortColumn) 0
SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn))
SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) + 1, LEN(@strSortColumn))
SET @SortTable = @Tables
SET @SortName = @strSortColumn
/**//*默认当前页*/
IF @CurrentPage 1
SET @CurrentPage = 1
/**//*设置分页参数.*/
/**//*筛选以及分组语句.*/
IF @Filter IS NOT NULL AND @Filter != ''
SET @strFilter = ' WHERE ' + @Filter + ' '
SET @strSimpleFilter = ' AND ' + @Filter + ' '
SET @strSimpleFilter = ''
SET @strFilter = ''
IF @Group IS NOT NULL AND @Group != ''
SET @strGroup = ' GROUP BY ' + @Group + ' '
SET @strGroup = ''
declare @cTemp NVarChar(1000)
declare @PageCount int, @lineCount decimal
CREATE TABLE #temp(linecount INT)
set @cTemp = 'insert into #temp (linecount) select count(*) FROM ' + @Tables + @strFilter + ' ' + @strGroup
exec (@cTemp)
select @lineCount = linecount from #temp
drop table #temp
if(@docount=1)
begin
select @lineCount '总行数'
end
else
--得到总页数
if @CurrentPage @PageCount
/**//*执行查询语句*/
set @cTemp = 'DECLARE @SortColumn ' + @type + '
SET ROWCOUNT ' + @strStartRow + '
SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
SET ROWCOUNT ' + @strPageSize + '
SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + ''
--print @cTemp
EXEC(@cTemp)
-----------------------------------------------------
分页查询的方法已经很多很多,今天这一节我也加入成为其中一员.
SQL Server中有一个Set Rowcount的的设置,它的意思是使命令的处理在响应指定的行数之后停止处理命令,利用这个特点,我们可以借用它来在一个千万行级数据表中实现高性能分页查询.先来说说实现方式:
①.、我们来假定Table中有一个已经建立了索引的主键字段ID(整数型),我们将按照这个字段来取数据进行分页.
看看Set Rowcount怎么来帮我们的忙吧:
Declare @ID int
Declare @MoveRecords int
--下面两行实现快速滚动到我们要取的数据的行,并把ID记录下来
Set Rowcount @MoveRecords
Select @ID=ID from Table1 Order by ID
Set Rowcount @PageSize
--最恨为了减少麻烦使用*了,但是今天这一节为了说明方便,暂时用一下
Set Rowcount 0
大家可以试试看,在一个1千W记录的表里面,一下子方翻页到第100页(每页100条),看看有多快!
分享]千万数量级分页存储过程(带效果演示)
效果演示:
** 千万数量级分页存储过程 **
@Group varchar(1000) = NULL
DECLARE @strFilter varchar(1000)
DECLARE @strSimpleFilter varchar(1000)
DECLARE @strGroup varchar(1000)
EXEC(
'
DECLARE @SortColumn ' + @type + '
SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
注:
①.)如表名参数为多表连接时,sort列必须指定表名;
建立access的数据库news,还有表news,表的字段(id,title),id唯一,输入数据保存,用下面代码可查询,可分页
-----------------------下面保存为search.asp--------------------------
html
head
title文件/title
/head
body bgcolor="#ffffff"
script
function btn_ck_bh_Click()
{
var cx = document.form1.cxsj.value;
form1.action ="search.asp?cx="+cx;
}
/script
tr
form method="POST" name="form1" action=search.asp
/form
/td
/tr
/table
%
'数据库查询
'获得搜索内容
cx = request("cx")
dim pageCount
'把page转换成整数
page = cint(request("page"))
set conn=server.createobject("adodb.connection")'
set rs=server.createobject("adodb.recordset")
conn.open "DBQ=" server.mappath("./news.mdb") ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
' 获取产品的名字记录集(从 news表中)
if cx "" then
sql = "select * from news where title like '%"cx "%' order by id desc"
sql ="select * from news order by id desc"
end if
'如果没有数据记录
if rs.bof then
errmsg=errmsg+"br"+"li"+keyword+"没有记录,请返回!!"
response.write errmsg
response.end
' 设置记录集在每页的总行数,也就是 PageSize属性
'把rs.pageCount转换成整数和page才能作比较
pageCount = cint(rs.pageCount)
' 设置当前的页号( AbsolutePage属性)
if page = 0 then
page =1
RS.AbsolutePage = page
x=1
' 显示当前页中的所有记录( PageSize中设置的行数)
WHILE NOT RS.EOF AND NumRowsRS.PageSize
%RS.MoveNext
NumRows=NumRows+1
WEND%
%if page=1 then%首页%end if%
%if page1 then%
A HREF="search.asp?page=1cx=%=cx%" 首页/A
%end if%★
%if page1 then%A HREF="search.asp?page=%=page-1%cx=%=cx%"%end if%上一页/a
dim pagewhere
dim p
p = 1
'把pagewhere转换成整数
'pagewhere = cint(request("pagewhere"))
pagewhere = pageCount
if pagewhere0 then
for p=1 to pagewhere
if p page then%
A HREF="search.asp?page=%=p%cx=%=cx%"%=p%/a
%end if
if p =page then%
%=p%
% end if
next
end if%
%if page PageCount then%
A HREF="search.asp?page=%=page+1%cx=%=cx%"
%end if %下一页/A★
%if page=PageCount then%尾页
%end if%
%if pagePageCount then%
A HREF="search.asp?page=%=PageCount%cx=%=cx%" 尾页/A
/p/FONT/td /tr tr
/body/html
rs.close
Set rs=nothing
conn.close
set conn=nothing
分页存储过程如果按主键来排序,速度还是比较快的,但是如果按照LIKE条件查询字符串,那速度会下降很多,排序字段是个非常关键的因素,提供一个存储过程,调用这个存储赛程就可以了,参考如下:
CREATE PROC proc_pageview
@tbname sysname, --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, --每页的大小(记录数)
@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
@Where varchar(1000)='', --查询条件
@RecordCount int OUTPUT --总页数
SET NOCOUNT ON
--检查对象是否有效
IF OBJECT_ID(@tbname) IS NULL
RETURN
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
--分页字段检查
IF ISNULL(@FieldKey,N'')=''
--其他参数检查及规范
IF ISNULL(@PageCurrent,0)1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
IF @RecordCount IS NULL
SET @sql=N'SELECT @RecordCount=COUNT(*)'
--计算分页显示的TOPN值
--第一页直接显示
IF @PageCurrent=1
--处理别名
IF @FieldShow=N'*'
SET @FieldShow=N'a.*'
--生成主键(惟一键)处理条件
@s nvarchar(1000),@Field sysname
WHILE CHARINDEX(N',',@s)0
SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
WHEN @Where='' THEN N'WHERE ('
ELSE @Where+N' AND ('
--执行查询
为此,您将编写以下内容:
①.、编写代码
a.添加代码以将专辑数据添加到专辑列表.
在此代码中:
①.)用于Context.BindJSON 将请求正文绑定到newAlbum.
b.更改您的main函数,使其包含该router.POST函数,如下所示.
①.)将路径中的POST方法与 /albumspostAlbums函数相关联.
a.如果服务器从上一节开始仍在运行,请停止它.
b.从包含 main.go 的目录中的命令行,运行代码.
c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求.
该命令应显示添加专辑的标题和 JSON.
d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加了新专辑.
该命令应显示专辑列表.
为此,您将:
a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑.
此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑.
(1)Context.Param用于从 URL 中检索id路径参数.当您将此处理程序映射到路径时,您将在路径中包含参数的占位符.
如上所述,实际使用中的服务可能会使用数据库查询来执行此查找.
b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id ,如以下示例所示.
(1)将/albums/:id路径与getAlbumByID功能相关联.在 Gin 中,路径中项目前面的冒号表示该项目是路径参数.
b.在包含 main.go 的目录中的命令行中,运行代码以启动服务器.
该命令应显示您使用其 ID 的专辑的 JSON.如果找不到专辑,您将收到带有错误消息的 JSON.
恭喜!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务.
本节包含您使用本教程构建的应用程序的代码.
collection.find().toArray(function(err,docs){
console.log(docs);
//将数据显示到网页上
// console.log('1'+docs[0].name);
// document.getElementById("editLevels").value =docs;
分页例子,对大量数据不行,
大量据数要用存储过程
'连接数据库
'执行sql 改你要的sql
set rs=server.CreateObject("adodb.recordset")%
下面的代码就复制用可以了
'分页
rs.pagesize=i
pu=request("pu")
if pu="" then pu=1
if cint(pu)="0" then pu=1
if cint(pu)rs.pagecount then pu=rs.pagecount
if not rs.eof then rs.absolutepage=cint(pu)
'显示记录
if not rs.eof then
do while not rs.eof and i=1
response.write rs("字段")'显示字段
'就这里改你要的,其它复制用就可以
rs.movenext
i=i-1
loop
当前第 %=pu% 页;分
%=rs.pagecount% 页;
共 %=rs.recordcount% 条记录;
每页%=i%条记录
a href="?pu=1"首 页/a
a href="?pu=%=cint(PU)-1%"上一页/a
a href="?pu=%=cint(PU)+1%"下一页/a
a href="?pu=%=rs.pagecount%"末 页/a
--------------------------------------
asp+存储分页,看一下实现的方法,自己就可以写了
/////////////////分页的代码/////////////
use pubs
go
@pageSize int,
@currentPage int,
@totalPage int output
as
declare @strQuery as varchar(1000)
declare @rowCount as int
select @rowCount=count(title_id)from titles
set @totalPage=CEILING(CAST(@rowCount AS FLOAT)/CAST(@pageSize AS FLOAT))
if @currentPage1
set @strQuery='select top '+cast(@pageSize as varchar
(10))+ ' * from titles
where title_id not in(select top '+cast(@pageSize*(@currentPage-1)as varchar(10))+' title_id from titles order by
title_id)
order by title_id'
set @strQuery='select top '+cast(@pageSize as varchar(10))+'
* from userinfo order by userID'
exec (@strQuery)
运行代码如下,正确运行,declare @total int
以上就是土嘎嘎小编为大家整理的go语言处理分页相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!