SQLServer数据库存储过程分页是怎样的

SQLServer数据库存储过程分页是怎样的,第1张

存储过程:create Procedure pname

( @pageIndex int,@pageSize)

as

select from tableName order by id

offset @pageIndex pageSize fetch next pageSize rows only

分页

sqlserver 在2008之前 使用 top 和 not int top 的方式来做分页

2008以后使用 row_number() 函数作为分页关键函数

2012使用 offset 1 fetch next 10 rows only

你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入

给你一个非缓存分页类的简单例子吧(Page类可以视作javabean):

/

@author Administrator

TODO 要更改此生成的类型注释的模板,请转至

窗口 - 首选项 - Java - 代码样式 - 代码模板

/

import javautil;

public class Pager {

private String PageUrl;

private boolean hasNext;

private boolean hasPrevious;

private String previousPage;

private String nextPage;

private int offset;

private int size;

private int length;

private int pagenumber;

public Pager(int offset,int length, int size, String url){

thisoffset=offset;

thislength=length;

thissize=size;

int index=urlindexOf("&pageroffset");

if (index>-1){

thisPageUrl=urlsubstring(0,index);

}else{

thisPageUrl=url;

}

}

public void setoffset(int offset){

thisoffset=offset;

}

public void setPagerUrl(String PagerUrl){

thisPageUrl=PagerUrl;

}

public void setsize(int size){

thissize=size;

}

public void setlength(int length){

thislength=length;

}

public int getoffset(){

return thisoffset;

}

public String getPageUrl(){

return thisPageUrl;

}

public boolean gethasNext(){

if((offset+1)length>=size){

hasNext=false;

}else{

hasNext=true;

}

return hasNext;

}

public boolean gethasPrevious(){

if(offset>=1){

thishasPrevious=true;

}else{

thishasPrevious=false;

}

return hasPrevious;

}

public String getpreviousPage(){

thispreviousPage="";

if (thisgethasPrevious()){

thispreviousPage=thisPageUrl+"&pageroffset="+(offset-1);

}

return previousPage;

}

public String getnextPage(){

thisnextPage="";

if(thisgethasNext()){

thisnextPage=thisPageUrl+"&pageroffset="+(offset+1);

}

return thisnextPage;

}

public int getpagenumber(){

float temppn=(float)size/(float)length;

pagenumber=new Float(temppn)intValue();

if (temppn>pagenumber){

thispagenumber++;

}

return thispagenumber;

}

public static ArrayList FindPageList(int offset,int length,List list){

ArrayList alist=new ArrayList();

for(int i=offsetlength; i<(offsetlength+length)&&i<listsize();i++){

alistadd(listget(i));

}

return alist;

}

}

具体使用:

1、在servlet初始化这个page

List list=DataUtilgetSpecifiedList();//得到整个数据列表

int offset=0;//便宜量

int length=10;//每页数据记录数

String pageOffset=requestgetParameter("pageroffset");

if(pageOffset==null||pageOffsetequals("")){

offset=0;

}else{

offset=IntegerparseInt(pageOffset);

}

String Url=requestgetRequestURL()toString()+""+requestgetQueryString();

Pager pager=new Pager(offset,length,listsize(),Url);

List RsList=PagerFindPageList(offset,length,list);

requestsetAttribute("Pager",pager);

requestsetAttribute("List",RsList);

RequestDispatcher dispatcher= requestgetRequestDispatcher("/UI/someModule/list_displayjsp");

dispatcherforward(request,response);

2、具体jsp中得到分页结果,并显示,并附页面跳转部分:

页面中得到分页结果

<%

List RpList=(List)requestgetAttribute("List");

Pager pager=(Pager)requestgetAttribute("Pager");

%>

<%--用for循环把RpList显示--%>

<!--页面跳转代码,这只是个形式,简化和改变方式的余地很大-->

<form name="pageForm"><%if(pagergethasPrevious()){%><a href="<%= pagergetpreviousPage()%>">prev</a>

<%}%>

<%if( pagergethasNext()){%><a href="<%=pagergetnextPage()%>">next</a><%}%><%if(pagergetpagenumber()>1) {%>第<select name="pager" onchange="windowlocation='<%=pagergetPageUrl()%>&pageroffset='+documentpageFormpagerselectedIndex;"><%for(int i=0;i<pagergetpagenumber();i++){%><option value=<%=i%> <%if(pagergetoffset()==i){ %>selected<%}%>><%=(i+1)%></option><%}%></select>页<%}%> 共<%=pagergetpagenumber()%>页</form>

ps:1、2两部分可以都放在页面类,不过你好像要MVC,所以给你这个代码。

是否可以解决您的问题?

1、新建模板

新建模板mutipagecpt,为了加快展示速度,我们可以使用分页查询,获取每个产品的详细信息并计算产品对应的订单中的应付金额,因此添加数据集时查询SQL语句为select 产品产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品单价, 产品库存量, 产品订购量,sum(应付金额) as 应付款项 from 产品,订单,订单明细 where 产品产品ID=订单明细产品ID and 订单明细订单ID=订单订单ID and 产品产品ID between 10(${page}-1)+1 and 10${page} group by 产品产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品单价, 产品库存量, 产品订购量 order by 产品产品ID,设置参数page的默认值为1,首次看到的是第一页,只查询出第1~20条记录;若page参数为2时,查询出第21~40条记录,即第二页内容。

2、自定义上一页、下一页按钮

在单元格中求出上一页、下一页页码的值

自定义上、下一页按钮

点击模板>模板web属性>分页预览设置,选择为该模板单独设置,在工具栏中增加两个自定义按钮分别命名为上一页,下一页,是工具栏上只剩下如下图所示几个按钮。

3、第一页与最后一页处理

求出总页数

双击总数所在单元格d出数据列设置对话框,选择高级>自定义显示,在自定义中填入公式:roundup($$$/10,0)求出总页数。

将第一行的行高设置为0,或者是隐藏:

上一页按钮设置:选中上一页自定义按钮,点击自定义JavaScript,在js中填入

var page= $("tr[tridx=0]","divcontent-container")children()eq(0)html();  

if(page==0)//如果报表显示第一页,则上一页不可用

thissetEnable(false);

else

windowlocationhref="${servletURL}reportlet=doc/Advanced/multipagecpt&page="+page;

下一页按钮设置与上一页的js差不多,只需要获取B1的值就可以了,所以在js中填入

var page= $("tr[tridx=0]","divcontent-container")children()eq(1)html();  

var total=$("tr[tridx=0]","divcontent-container")children()eq(2)html();  

if(parseInt(page) > parseInt(total))//如果报表显示最后一页,则下一页不可用

{

thissetEnable(false);

}

else

windowlocationhref="${servletURL}reportlet=doc/Advanced/multipagecpt&page="+page;

分页预览即可查看效果

以上就是关于SQLServer数据库存储过程分页是怎样的全部的内容,包括:SQLServer数据库存储过程分页是怎样的、(JAVA)从数据库查出所有数据再分页的方法、有没有方法使FineReport进行假分页,分页让数据库进行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9839509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存