热门搜索 :
考研考公
您的当前位置:首页正文

SQL数据分页技术

2023-11-08 来源:东饰资讯网

AdventureWorks2008

 

1、Top*Top

 1 -使用 Top*Top 2 DECLARE @Start datetime,@end datetime; 3 SET @Start=getdate(); 4 5 DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max); 6 SET @PageNumber=5000; 7 SET @Pt=10; 8 SET @Sql=‘SELECT T2.* FROM ( 9 SELECT TOP 10 T1.* FROM 10 (SELECT TOP ‘ + STR(@PageNumber*@PageSize) +‘ * FROM Production.TransactionHistoryArchive11 ORDER BY ReferenceOrderID ASC) AS T112 ORDER BY ReferenceOrderID DESC) AS T213 ORDER BY ReferenceOrderID ASC‘;14 EXEC (@sql);15 16 SET @end=getdate();17 PRINT Datediff(millisecond,@Start,@end);

2、表变量

 1 --使用表变量 2 DECLARE @Start datetime,@end datetime; 3 SET @Start=getdate(); 4 DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max); 5 SET @PageNumber=5000; 6 SET @PageSize=10; 7 8 DECLARE @local_variable table (RowNumber int identity(1,1),[TransactionID] [int], 9 [ProductID] [int],10 [ReferenceOrderID] [int],11 [ReferenceOrderLineID] [int],12 [TransactionDate] [datetime],13 [TransactionType] [nchar](1),14 [Quantity] [int],15 [ActualCost] [money],16 [ModifiedDate] [datetime]);17 insert into @local_variable (TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate) 18 SELECT TOP 50000 TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate from Production.TransactionHistoryArchive ORDER BY ReferenceOrderID ASC19 select * from @local_variable where RowNumber > (@PageNumber-1)*@PageSize and RowNumber <= @PageNumber*@PageSize20 21 SET @end=getdate();22 PRINT Datediff(millisecond,@Start,@end);

3、临时表

--使用临时表DECLARE @Start datetime,@end datetime;SET @Start=getdate();DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max);SET @PageNumber=5000;SET @PageSize=10;create table #local_variable(RowNumber int identity(1,1),[TransactionID] [int], [ProductID] [int], [ReferenceOrderID] [int], [ReferenceOrderLineID] [int], [TransactionDate] [datetime], [TransactionType] [nchar](1), [Quantity] [int], [ActualCost] [money], [ModifiedDate] [datetime]);insert into #local_variable (TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate) SELECT TOP 50000 TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate from Production.TransactionHistoryArchive ORDER BY ReferenceOrderID ASCselect * from #local_variable where RowNumber > (@PageNumber-1)*@PageSize and RowNumber <= @PageNumber*@PageSizeSET @end=getdate();PRINT Datediff(millisecond,@Start,@end);

4、ROW_NUMBER

 

--使用 ROW_NUMBERDECLARE @Start datetime,@end datetime;SET @Start=getdate();

DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max);SET @PageNumber=5000;SET @PageSize=10;SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY ReferenceOrderID) AS RowNumber, *FROM Production.TransactionHistoryArchive) AS TWHERE T.RowNumber<=@PageNumber*@PageSize AND T.RowNumber>(@PageNumber-1)*@PageSize;

SET @end=getdate();PRINT Datediff(millisecond,@Start,@end);

SQL数据分页技术

标签:

小编还为您整理了以下内容,可能对您也有帮助:

Oracle常见SQL分页实现方案

  在Oracle中 用SQL来实现分页有很多种实现方式 但有些语句可能并不是很通用 只能用在一些特殊场景之中

  以下介绍三种比较通用的实现方案 在以下各种实现中 ROWNUM是一个最核心的关键词 在查询时他是一个虚拟的列 取值为 到记录总数的序号

  首先来介绍我们工作中最常使用的一种实现方式

  SELECT *

  FROM (SELECT ROW_ * ROWNUM ROWNUM_

  FROM (SELECT *

  FROM TABLE

  WHERE TABLE _ID = XX

  ORDER BY GMT_CREATE DESC) ROW_

  WHERE ROWNUM <= )

  WHERE ROWNUM_ >= ;

  其中最内层的查询SELECT为不进行翻页的原始查询语句 可以用自己的任意Select SQL替换 ROWNUM <= 和ROWNUM >= 控制分页查询的每页的范围

  分页的目的就是控制输出结果集大小 将结果尽快的返回 上面的SQL语句在大多数情况拥有较高的效率 主要体现在WHERE ROWNUM <= 这句上 这样就控制了查询过程中的最大记录数

  上面例子中展示的在查询的第二层通过ROWNUM <= 来控制最大值 在查询的最外层控制最小值 而另一种方式是去掉查询第二层的WHERE ROWNUM <= 语句 在查询的最外层控制分页的最小值和最大值 此时SQL语句如下 也就是要介绍的第二种实现方式

  SELECT *

  FROM (SELECT A * ROWNUM RN

  FROM (SELECT *

  FROM TABLE

  WHERE TABLE _ID = XX

  ORDER BY GMT_CREATE DESC) A)

  WHERE RN BEEEN AND ;

  由于Oracle可以将外层的查询条件推到内层查询中 以提高内层查询的执行效率 但不能跨越多层

  对于第一个查询语句 第二层的查询条件WHERE ROWNUM <= 就可以被Oracle推入到内层查询中 这样Oracle查询的结果一旦超过了ROWNUM条件 就终止查询将结果返回了

  而 第二个查询语句 由于查询条件BEEEN AND 是存在于查询的第三层 而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义 因为最内层查询不知道RN代表什么) 因此 对于第二个查询语句 Oracle最内层返回给中间层的是所有满足条件的数据 而中间层返回给最外层的也是所有数据 数据的过滤在最外层完成 显然这个效率要比第一个查询低得多

  以上两种方案完全是通过ROWNUM来完成 下面一种则采用ROWID和ROWNUM相结合的方式 SQL语句如下

  SELECT *

  FROM (SELECT RID

  FROM (SELECT R RID ROWNUM LINENUM

  FROM (SELECT ROWID RID

  FROM TABLE

  WHERE TABLE _ID = XX

  ORDER BY GMT_CREATE DESC) R

  WHERE ROWNUM <= )

  WHERE LINENUM >= ) T

  TABLE T

  WHERE T RID = T ROWID;

  从语句上看 共有 层Select嵌套查询 最内层为可替换的不分页原始SQL语句 但是他查询的字段只有ROWID 而没有任何待查询的实际表字段 具体查询实际字段值是在最外层实现的

  这种方式的原理大致为 首先通过ROWNUM查询到分页之后的 条实际返回记录的ROWID 最后通过ROWID将最终返回字段值查询出来并返回

  和前面两种实现方式相比 该SQL的实现方式更加繁琐 通用性也不是非常好 因为要将原始的查询语句分成两部分(查询字段在最外层 表及其查询条件在最内层)

  但这种实现在特定场景下还是有优势的 比如我们经常要翻页到很后面 比如 条记录中我们经常需要查 及其以后的数据 此时该方案效率可能要比前面的高

  因为前面的方案中是通过ROWNUM <= 来控制的 这样就需要查询出 条数据 然后取最后 之间的数据 而这个方案直接通过ROWID取需要的那 条数据

  从不断向后翻页这个角度来看 第一种实现方案的成本会越来越高 基本上是线性增长 而第三种方案的成本则不会像前者那样快速 他的增长只体现在通过查询条件读取ROWID的部分

  当然 除了以上提了这些方案 我们还可以用以下的SQL来实现

  SELECT *

  FROM TABLE

  WHERE TABLE _ID NOT IN

  (SELECT TABLE _ID FROM TABLE WHERE ROWNUM <= )

  AND ROWNUM <= ;

  SELECT *

  FROM TABLE

  WHERE ROWNUM <=

  MINUS

  SELECT * FROM TABLE WHERE ROWNUM <= ;

  ………………

  注意 当ROWNUM作为查询条件时 他是在order by之前执行 所以要特别小心

  比如我们想查询TABLE 中按TABLE _ID倒序排列的前 条记录不能用如下的SQL来完成

lishixin/Article/program/Oracle/201311/11198

SQL数据库分页原理(sql分页)

要想分页,首先得做好准备工作。你要先声明每页显示多少条数据,还得获取当前选择的是多少页的页码。有了这两个分页就好办了。

sql如下:selecttop10fromtableName

where(idnotin(selecttop20fromtableNameorderbyIddesc))orderbyIddesc

每页显示的数量:自己定义。

总页数:数据总条数/每页显示的条数

当前页码的计算方法:(页码-1)*每页显示的数量。比如我要浏览第3页的数据,3从客户端传送过来后,在后台对页码进行处理:(3-1)*每页显示的数量(假如是10).算出来后的结果就是20.你在把20以参数注入的方式动态添加到上面那个20那里就ok了。

sql中的10表示你每页显示的数据,这里跟10,就代表每页显示10条。(你可以定义一个常量作为每页显示的条数)

where中的20表示不包括前面的20条数据,也就是查询出从第21条到30之间的数据。

不知道我这样说你是否理解,其实只要理解了sql语句,分页就很好做了。

dedecmssql怎么分页sql如何实现分页

Dreamweaverdede:内容页调用列表时SQL语句如何分页?

我们可以再嵌入一个类似于{dede:listSQLSQL=select*fromwp_posts}要使用的标签。

好了,想法已经有了。接下来我们打开文件include/arc.listview.class.php给它做个小操作!

找到:

如果(!is_object($ctag)){$ctag=$this-DTP-GetTag(列表}

这一段,在它后面添加以下代码:

如果(!is_object($ctag)){$ctag=$this-DTP-GetTag(listsqlif(is_object($ctag)){$cquery=$ctag-GetAtt(sql$cquery=preg_replace(/SELECT(。*?)FROM/is,$cquery=preg_replace(/ORDER(。*?)SC/is,$row=$this-dsql-GetOne($cquery);if(is_array($row)){$this-totalresult=$row[dd}else{$this-totalresult=0;}}}//结束

然后找到:

if($ctagGetName()==list){$limitstart=($thisPageNo-1)*$thisPageSize;$row=$thisPageSize;if(trim($ctagGetInnerText())==){$InnerText=GetSysTemplets(list_fulllist.htm);}else{$InnerText=trim($ctagGetInnerText());}$thisdtpAssign($tagid,$thisGetArcList($limitstart,$row,$ctagGetAtt(col),$ctagGetAtt(titlelen),$ctagGetAtt(infolen),$ctagGetAtt(imgwidth),$ctagGetAtt(imgheight),$ctagGetAtt(listtype),$ctagGetAtt(orderby),$InnerText,$ctagGetAtt(tablewidth),$ismake,$ctagGetAtt(orderway)));}if($ctag-GetName()==列表pageno-1)*$this-页面大小;$row=$this-页面大小;if(trim($ctag-GetInnerText())==="){$InnerText=GetSysTemplets(list_fulllist.htm}else{$InnerText=trim($ctag-GetInnerText());}$this-DTP-分配($tagid,$this-GetArcList($limitstart,$row,$ctag-GetAtt(colGetAtt(titlelenGetAtt(infolenGetAtt(imgwidthGetAtt(imgheightGetAtt(列表类型GetAtt(orderbyGetAtt(表格宽度GetAtt(orderway}

这一段,在它后面添加以下代码:

elseif($ctag-GetName()==listsqlpageno-1)*$this-页面大小;$row=$this-页面大小;if(trim($ctag-GetInnerText())==="){$InnerText=GetSysTemplets(list_fulllist.htm}else{$InnerText=trim($ctag-GetInnerText());}$this-DTP-分配($tagid,$this-GetSqlList($limitstart,$row,$ctag-GetAtt(sql}//结束

最后,找到函数GetArcList方法,然后添加一个方法,通过传入sql参数可以获得指定的数据源。代码如下:

/***通过listsql标签中的sql属性传入的参数获得一个单列文档列表**/functiongetsqllist($limitstart=0,$row=10,$SQL=,$innertext){global$CFG_list_son;$innertext=trim($innertext);if($innertext==){$innertext=GetSysTemplets(list_fulllist.htm}//处理SQL语句$limitStr="LIMIT{$limitstart},{$row}$this-dsql-SetQuery($sql。$limitStr);$this-dsql-执行(阿尔);$T2=exectime();//echo$T2-$t1;$sqllist=;$this-DTP2-loadsource($innertext);$GLOBALS[自动索引]=0;//获取字段while($row=$this;dsql-GetArray(艾尔自动索引];if(is_array($this-DTP2-CTags)){foreach($this-DTP2-CTagsas$k=GetName()==数组){//传递整个数组,在runphp模式下有特殊作用$this:DTP2-赋值($k,$row);}else{if(isset($row[$ctag-GetName()])){$this-DTP2-Assign($k,$row[$ctag-GetName()]);}else{$this-DTP2-分配($k,);}}}}$sqllist。=$this-DTP2-GetResult();}//while$T3=exectime();//echo($T3-$T2);$this-dsql-freeresult(阿尔);返回$sqllist}//结束

一共添加了三段代码,每段代码基本上都引用了它正上方的原代码,没有在任何地方改动原代码,应该算是比较完美的操作了。接下来,模板文件中的使用方法就和最初的想法中提到的一样,分页标签还在使用。调用示例:

{dede:listSQLSQL=selectID,post_titlefromwp_posts}/a!-分页-{dede:pagelistlistsize=2listitem=/}

调用的栏目怎么加nofollwo没有超链接栏目连接都是调用过来的,想把关于我们什么的nofollwo?

栏目设置里有个交叉栏目的设置,添加上你要调用的栏目id就可以了,这样你这个栏目列表里就可以直接调用你要第哦啊月的栏目文章,并分页了请保留dedecms版权信息

利用SQL语句对不同数据库进行高效果分页[2]

Oracle数据库

因为Oracle数据库没有Top关键字 所以这里就不能够像微软的数据据那样操作 这里有两种方法

( ) 一种是利用相反的

PAGESIZE 每页显示的记录数  CURRENTPAGE 当前页号

数据表的名字是 ponents  索引主键字是 id

select * from ponents where id not  in(select id from ponents where  rownum<=(PAGESIZE*(CURRENTPAGE )))  and rownum<=PAGESIZE order by id;

如下例

select * from ponents where id not in  (select id from ponents where rownum<= )  and rownum<= order by id;

从 到记录开始选择 选择前面 条

( ) 使用minus 即中文的意思就是减去

select * from ponents where rownum  <=(PAGESIZE*(CURRENTPAGE )) minus  select * from ponents where rownum  <=(PAGESIZE*(CURRENTPAGE ));  如例 select * from ponents where  rownum<= minus select * from ponents  where rownum<= ;

( ) 一种是利用Oracle的rownum 这个是Oracle查询自动返回的序号 一般不显示 但是可以通过select rownum from [表名]看到 注意 它是从 到当前的记录总数

select * from (select rownum tid ponents   * from ponents where rownum<= ) where tid<= ;

lishixin/Article/program/SQL/201311/16223

    利用SQL语句对不同数据库进行高效果分页[2]

    Oracle数据库

    因为Oracle数据库没有Top关键字 所以这里就不能够像微软的数据据那样操作 这里有两种方法

    ( ) 一种是利用相反的

    PAGESIZE 每页显示的记录数  CURRENTPAGE 当前页号

    数据表的名字是 ponents  索引主键字是 id

    select * from ponents where id not  in(select id from ponents where  rownum<=(PAGESIZE*(CURRENTPAGE )))  and rownum<=PAGESIZE order by id;

    如下例

    select * from ponents where id not in  (select id from ponents where rownum<= )  and rownum<= order by id;

    从 到记录开始选择 选择前面 条

    ( ) 使用minus 即中文的意思就是减去

    select * from ponents where rownum  <=(PAGESIZE*(CURRENTPAGE )) minus  select * from ponents where rownum  <=(PAGESIZE*(CURRENTPAGE ));  如例 select * from ponents where  rownum<= minus select * from ponents  where rownum<= ;

    ( ) 一种是利用Oracle的rownum 这个是Oracle查询自动返回的序号 一般不显示 但是可以通过select rownum from [表名]看到 注意 它是从 到当前的记录总数

    select * from (select rownum tid ponents   * from ponents where rownum<= ) where tid<= ;

    lishixin/Article/program/SQL/201311/16223

      dedededesql标签如何分页

      Dreamweaverdede:内容页调用列表时SQL语句如何分页?

      我们可以再嵌入一个类似于{dede:listSQLSQL=select*fromwp_posts}要使用的标签。

      好了,想法已经有了。接下来我们打开文件include/arc.listview.class.php给它做个小操作!

      找到:

      如果(!is_object($ctag)){$ctag=$this-DTP-GetTag(列表}

      这一段,在它后面添加以下代码:

      如果(!is_object($ctag)){$ctag=$this-DTP-GetTag(listsqlif(is_object($ctag)){$cquery=$ctag-GetAtt(sql$cquery=preg_replace(/SELECT(。*?)FROM/is,$cquery=preg_replace(/ORDER(。*?)SC/is,$row=$this-dsql-GetOne($cquery);if(is_array($row)){$this-totalresult=$row[dd}else{$this-totalresult=0;}}}//结束

      然后找到:

      if($ctagGetName()==list){$limitstart=($thisPageNo-1)*$thisPageSize;$row=$thisPageSize;if(trim($ctagGetInnerText())==){$InnerText=GetSysTemplets(list_fulllist.htm);}else{$InnerText=trim($ctagGetInnerText());}$thisdtpAssign($tagid,$thisGetArcList($limitstart,$row,$ctagGetAtt(col),$ctagGetAtt(titlelen),$ctagGetAtt(infolen),$ctagGetAtt(imgwidth),$ctagGetAtt(imgheight),$ctagGetAtt(listtype),$ctagGetAtt(orderby),$InnerText,$ctagGetAtt(tablewidth),$ismake,$ctagGetAtt(orderway)));}if($ctag-GetName()==列表pageno-1)*$this-页面大小;$row=$this-页面大小;if(trim($ctag-GetInnerText())==="){$InnerText=GetSysTemplets(list_fulllist.htm}else{$InnerText=trim($ctag-GetInnerText());}$this-DTP-分配($tagid,$this-GetArcList($limitstart,$row,$ctag-GetAtt(colGetAtt(titlelenGetAtt(infolenGetAtt(imgwidthGetAtt(imgheightGetAtt(列表类型GetAtt(orderbyGetAtt(表格宽度GetAtt(orderway}

      这一段,在它后面添加以下代码:

      elseif($ctag-GetName()==listsqlpageno-1)*$this-页面大小;$row=$this-页面大小;if(trim($ctag-GetInnerText())==="){$InnerText=GetSysTemplets(list_fulllist.htm}else{$InnerText=trim($ctag-GetInnerText());}$this-DTP-分配($tagid,$this-GetSqlList($limitstart,$row,$ctag-GetAtt(sql}//结束

      最后,找到函数GetArcList方法,然后添加一个方法,通过传入sql参数可以获得指定的数据源。代码如下:

      /***通过listsql标签中的sql属性传入的参数获得一个单列文档列表**/functiongetsqllist($limitstart=0,$row=10,$SQL=,$innertext){global$CFG_list_son;$innertext=trim($innertext);if($innertext==){$innertext=GetSysTemplets(list_fulllist.htm}//处理SQL语句$limitStr="LIMIT{$limitstart},{$row}$this-dsql-SetQuery($sql。$limitStr);$this-dsql-执行(阿尔);$T2=exectime();//echo$T2-$t1;$sqllist=;$this-DTP2-loadsource($innertext);$GLOBALS[自动索引]=0;//获取字段while($row=$this;dsql-GetArray(艾尔自动索引];if(is_array($this-DTP2-CTags)){foreach($this-DTP2-CTagsas$k=GetName()==数组){//传递整个数组,在runphp模式下有特殊作用$this:DTP2-赋值($k,$row);}else{if(isset($row[$ctag-GetName()])){$this-DTP2-Assign($k,$row[$ctag-GetName()]);}else{$this-DTP2-分配($k,);}}}}$sqllist。=$this-DTP2-GetResult();}//while$T3=exectime();//echo($T3-$T2);$this-dsql-freeresult(阿尔);返回$sqllist}//结束

      一共添加了三段代码,每段代码基本上都引用了它正上方的原代码,没有在任何地方改动原代码,应该算是比较完美的操作了。接下来,模板文件中的使用方法就和最初的想法中提到的一样,分页标签还在使用。调用示例:

      {dede:listSQLSQL=selectID,post_titlefromwp_posts}/a!-分页-{dede:pagelistlistsize=2listitem=/}

      jquery分页排序插件jplist怎么弄?

      jPList是一个灵活的jQuery插件,支持排序、分页和过滤的HTML结构(DIVs,UL/LI,tables,等等)。

      特点适用于任何内容(表、列表、p元素等)升序和降序排序字母数字和数字排序日期和时间排序自动分页任意数量的文本框过滤器任意数量的下降过滤器复选框和单选按钮过滤器数据来源:PHP+MySQL,ASP.NET+SqlServer,PHP+SQLite支持本地存储和cookies网格/列表视图演示页面完全可定制的风格在所有主要浏览器工作SEO友好带注释的源代码详细的文档

      如何在DataGrid控件中实现自定义分页?

      在一般情况下,DataGrid控件每次实现翻页操作时,都会将数据源中的数据重新调用一次,当数据中数据很多时,这样做就会很浪费系统资源和降低程序的执行效率.这时候我们一般通过自定义分页来解决这个问题.DataGrid控件的AllowCustomPaging属性用来获取或设置DataGrid控件是否允许自定义分页;VirtualItemCoun属性用来获取或设置在使用自定义分页时DataGrid中实际的项数.要实现自定义分页,必须将AllowPaging与AllowCustomPaging属性都设置为"True".在DataGrid中要实现自定义分页的关键是,使该控件仅仅调用当前显示所需要的数据源数据,在下面的例子中通过CurrentPageIndex和PageSize属性的值,在数据绑定时只取当前页需要的数据.(1)页面代码:复制代码代码如下:%@Pagelanguage="c#"Codebehind="Main.aspx.cs"AutoEventWireup="false"Inherits="SissonDemo.Main"%>!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">HTML>HEAD>title>Main/title>metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">metaname="CODE_LANGUAGE"Content="C#">metaname="vs_defaultClientScript"content="JavaScript">metaname="vs_targetSchema"content="http://schemas.microsoft.com/intellisense/ie5">/HEAD>bodyMS_POSITIONING="GridLayout">formid="Form1"method="post"runat="server">FONTface="宋体">asp:DataGridid="DataGrid1"runat="server"Width="792px"Height="96px"AllowCustomPaging="True"AllowPaging="True"PageSize="5">PagerStyleMode="NumericPages">/PagerStyle>/asp:DataGrid>/FONT>/form>/body>/HTML>(2)后台代码:复制代码代码如下:usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;usingSystem.Web.SessionState;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;namespaceSissonDemo{/**////summary>///Main的摘要说明。////summary>publicclassMain:System.Web.UI.Page{protectedSystem.Web.UI.WebControls.DataGridDataGrid1;intstartIndex=0;//用来保存当前页数据项的起始索引privatevoidPage_Load(objectsender,System.EventArgse){if(!IsPostBack){Bind();//初始化时进行数据绑定}}voidBind()//绑定数据方法{//定义数据库连接对象SqlConnectioncn=newSqlConnection("server=.;database=pubs;uid=sa;pwd=");//创建数据适配对象SqlDataAdapterda=newSqlDataAdapter("selecttitle_id,title,type,pub_id,price,pubdatefromtitles",cn);//创建DataSet对象DataSetds=newDataSet();try{//从指定的索引开始取PageSize条记录.da.Fill(ds,startIndex,DataGrid1.PageSize,"CurDataTable");da.Fill(ds,"AllDataTable");//填充数据集合//设置DataGrid控件实际要显示的项数DataGrid1.VirtualItemCount=ds.Tables.Rows.Count;//进行数据绑定DataGrid1.DataSource=ds.Tables;DataGrid1.DataBind();}catch{Page.RegisterClientScriptBlock("","script>alert('数据显示错误');/script>");}}Web窗体设计器生成的代码#regionWeb窗体设计器生成的代码overrideprotectedvoidOnInit(EventArgse){////CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。//InitializeComponent();base.OnInit(e);}/**////summary>///设计器支持所需的方法-不要使用代码编辑器修改///此方法的内容。////summary>privatevoidInitializeComponent(){this.DataGrid1.PageIndexChanged+=newSystem.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);this.Load+=newSystem.EventHandler(this.Page_Load);}#endregionprivatevoidDataGrid1_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse){//设置DataGrid当前页的索引值为用户选择的页的索引DataGrid1.CurrentPageIndex=e.NewPageIndex;//取得当前页为止总共有多少条记录,以便在下一页就从该记录开始读取startIndex=DataGrid1.PageSize*DataGrid1.CurrentPageIndex;//取得绑定数据Bind();}}}在这段程序中,首先在数据绑定时,设置DataGrid控件的VirtualItemCoun属性值为查询结果集中的记录总数,然后取得当前页要显示的数据,初始化时当前页显示的数据为从取到的数据的零位置开始,到DataGrid控件的PageSize属性的设定值为止的数据记录数.在分页操作中重新定义了取得下一页数据时的数据项的开始索引值,然后调用数据绑定方法把取到的新数据和DataGrid控件重新绑定.

      SQLServer两种分页的存储过程使用介绍?

      存储过程:createProcerepname(@pageIndexint,@pageSize)asselect*fromtableNameorderbyidoffset@pageIndex*pageSizefetchnextpageSizerowsonly分页:sqlserver在2008之前使用top和notinttop的方式来做分页2008以后使用row_number()函数作为分页关键函数2012使用offset1fetchnext10rowsonly你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入

      分页技术

      分页原理: 需要两条SQL

      需要用户传入的数据:

      currentPage=1:当前页

      pageSize=10:每页显示几条数据

      通过SQL查询出来的:

      第一:查询符合条件的总数

      select count(*) from 表名 where 条件

      第二:查询符合条件的结果集

      select * from 表名 where 条件 limit beginindex,pageSize

      beginindex:从哪一条数据的索引开始截取(从0开始)

      pageSize:每页取多少条数据

      beginindex=(currentPage-1)*pageSize;

      程序员计算:

      首先要提供以下内容

      beginpage=1(首页/第一页,默认是1)

      prevPage:上一页

      nextPage:下一页

      totalPage:总页数/末页

      定义page

      mapper

      测试

      用户传入的分页可以使用map容器来装

      1、引入maven依赖

      2、

      分页技术

      分页原理: 需要两条SQL

      需要用户传入的数据:

      currentPage=1:当前页

      pageSize=10:每页显示几条数据

      通过SQL查询出来的:

      第一:查询符合条件的总数

      select count(*) from 表名 where 条件

      第二:查询符合条件的结果集

      select * from 表名 where 条件 limit beginindex,pageSize

      beginindex:从哪一条数据的索引开始截取(从0开始)

      pageSize:每页取多少条数据

      beginindex=(currentPage-1)*pageSize;

      程序员计算:

      首先要提供以下内容

      beginpage=1(首页/第一页,默认是1)

      prevPage:上一页

      nextPage:下一页

      totalPage:总页数/末页

      定义page

      mapper

      测试

      用户传入的分页可以使用map容器来装

      1、引入maven依赖

      2、

      SQL语句分页查询,一页面多少数据合适

      2万条。
      在SQLServer中通过SQL语句实现分页查询,在SQLServer中通过SQL语句实现分页后插入数据2万条,用更多的数据测试会明显一些。微软的SQLSERVER提供了两种索引:聚集索引,也称聚类索引、簇集索引和非聚集索引,也称非聚类索引、非簇集索引。
      建立一个web应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标。游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机。更重要的是,对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可,后来,网上有人改造了此存储过程,实现了分页储存。

      SQL语句分页查询,一页面多少数据合适

      2万条。
      在SQLServer中通过SQL语句实现分页查询,在SQLServer中通过SQL语句实现分页后插入数据2万条,用更多的数据测试会明显一些。微软的SQLSERVER提供了两种索引:聚集索引,也称聚类索引、簇集索引和非聚集索引,也称非聚类索引、非簇集索引。
      建立一个web应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标。游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机。更重要的是,对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可,后来,网上有人改造了此存储过程,实现了分页储存。

      几种常见SQL分页方式

      create table pagetest
      (
      id int identity(1,1) not null,
      col01 int null,
      col02 nvarchar(50) null,
      col03 datetime null
      )

      --分页1,not in/top
      select top 50 * from pagetest
      where id not in (select top 9900 id from pagetest order by id)
      order by id
       
      --分页2,not exists
      select top 50 * from pagetest
      where not exists
      (select 1 from (select top 9900 id from pagetest order by id)a  where a.id=pagetest.id)
      order by id
       
      --写法3,max/top
      select top 50 * from pagetest
      where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
      order by id
       
      --分页4,row_number()
      select top 50 * from
      (select row_number()over(order by id)rownumber,* from pagetest)a
      where rownumber>9900
       
      select * from
      (select row_number()over(order by id)rownumber,* from pagetest)a
      where rownumber>9900 and rownumber<9951
       
      select * from
      (select row_number()over(order by id)rownumber,* from pagetest)a
      where rownumber between 9901 and 9950
       
      --分页5,在csdn上一帖子看到的,row_number() 变体,不基于已有字段产生记录序号,先按条件筛选以及排好序,再在结果集上给一常量列用于产生记录序号
      select *
      from (
          select row_number()over(order by tempColumn)rownumber,*
          from (select top 9950 tempColumn=0,* from pagetest where 1=1 order by id)a
      )b
      where rownumber>9900

      结论:

      1.max/top,ROW_NUMBER()都是比较不错的分页方法。相比ROW_NUMBER()只支持sql2005及以上版本,max/top有更好的可移植性,能同时适用于sql2000,access。

      2.not exists感觉是要比not in效率高一点点。

      3.ROW_NUMBER()的3种不同写法效率看起来差不多。

      4.ROW_NUMBER() 的变体基于这个测试效率实在不好。

      几种常见SQL分页方式

      create table pagetest
      (
      id int identity(1,1) not null,
      col01 int null,
      col02 nvarchar(50) null,
      col03 datetime null
      )

      --分页1,not in/top
      select top 50 * from pagetest
      where id not in (select top 9900 id from pagetest order by id)
      order by id
       
      --分页2,not exists
      select top 50 * from pagetest
      where not exists
      (select 1 from (select top 9900 id from pagetest order by id)a  where a.id=pagetest.id)
      order by id
       
      --写法3,max/top
      select top 50 * from pagetest
      where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
      order by id
       
      --分页4,row_number()
      select top 50 * from
      (select row_number()over(order by id)rownumber,* from pagetest)a
      where rownumber>9900
       
      select * from
      (select row_number()over(order by id)rownumber,* from pagetest)a
      where rownumber>9900 and rownumber<9951
       
      select * from
      (select row_number()over(order by id)rownumber,* from pagetest)a
      where rownumber between 9901 and 9950
       
      --分页5,在csdn上一帖子看到的,row_number() 变体,不基于已有字段产生记录序号,先按条件筛选以及排好序,再在结果集上给一常量列用于产生记录序号
      select *
      from (
          select row_number()over(order by tempColumn)rownumber,*
          from (select top 9950 tempColumn=0,* from pagetest where 1=1 order by id)a
      )b
      where rownumber>9900

      结论:

      1.max/top,ROW_NUMBER()都是比较不错的分页方法。相比ROW_NUMBER()只支持sql2005及以上版本,max/top有更好的可移植性,能同时适用于sql2000,access。

      2.not exists感觉是要比not in效率高一点点。

      3.ROW_NUMBER()的3种不同写法效率看起来差不多。

      4.ROW_NUMBER() 的变体基于这个测试效率实在不好。

      MySQL分页的sql语言怎么写?

      1、首先我们建立一个表表的数据,这个表里有25条数据,id从1到25。(下图是部分截图)

      2、要分页数据,首先我们假设一页有10条数据,我们可以用mysql的 limit关键字来限定返回多少条数据。并且用order by来排序数据,这里用 id来排序。所以第一页的sql可以如图这样写。

      3、执行后得到的数据如图,就是 id从1到10的前10条数据,因为我们是按id升序来排序的。

      4、上面第一页的sql是简化的写法,完整的写法如图,得到的结果和上图的一模一样。代码里 limit 0, 10 的意思是从第一条数据开始,取10条数据。(注意的是第一条数据是从0开始的)

      5、那么第二页的数据,关键是要知道是从哪一条数据开始,可以用这个公式得到: (页码-1)  * 每页显示多少条,即 (2-1) * 10 = 10, 所以sql语句如图, limit 10, 10。

      6、执行后,结果正确,得到id从11到20的10条数据。

      7、同理第三页数据的sql如图,<br/>就是 limit 20, 10。

      8、查询的结果如图,因为这页只剩下5条数据了,所以只显示5条数据。如果你有更多页的数据,后面的数据只需要按上面的公式,得到从哪行开始,就可以写对应的sql语句了。

      sql分页问题

      SQL分页语句

      -前提是必需有一列是自动增长类型,唯一性

      --方法一

      SELECT

      DISTINCT

      TOP

      8.CategoryID

      FROM

      tbl_Proct_Procts

      WHERE

      (UserID

      =

      73)

      AND

      (CategoryID

      >

      (SELECT

      MAX(categoryid)

      FROM

      (SELECT

      DISTINCT

      TOP

      16.categoryid

      FROM

      tbl_proct_procts

      where

      userid=73

      ORDER

      BY

      categoryid)

      AS

      b))

      ORDER

      BY

      CategoryID

      --方法二

      select

      top

      10.*

      from

      [order

      details]

      where

      orderid>all(select

      top

      10.orderid

      from

      [order

      details]

      order

      by

      orderid)

      order

      by

      orderid

      Top