这里面介绍一下常用的分页方法:
1.使用top来分页
select top @pageSize * from table where id not in (select top @pageSize*(@pageIndex-1) id from table)
SELECT * FROM ( SELECT TOP 页面容量 * FROM ( SELECT TOP 页面容量*当前页码 * FROM 表 WHERE 条件 ORDER BY 字段A ASC ) AS TEMPTABLE1 ORDER BY 字段A DESC ) AS TEMPTABLE2 ORDER BY 字段A ASC
2.使用 ROW_NUMBER()OVER
SELECT * FROM (SELECT ROW_NUMBER() OVER (order by T.字段名 desc )AS Row, T.* from 表名 T WHERE 条件 ) TT WHERE TT.Row between 起始位置 and 结束位置; StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM ( "); strSql.Append(" SELECT ROW_NUMBER() OVER ("); if (!string.IsNullOrWhiteSpace(orderby.Trim())) { strSql.Append("order by T." + orderby); } else { strSql.Append("order by T.ID desc"); } strSql.Append(")AS Row, T.* from TableName T "); if (!string.IsNullOrWhiteSpace(strWhere.Trim())) { strSql.Append(" WHERE " + strWhere); } strSql.Append(" ) TT"); strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
3.使用分页存储过程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sys_Page_v2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[sys_Page_v2] GO CREATE PROCEDURE [dbo].[sys_Page_v2] @PCount int output, --总页数输出 @RCount int output, --总记录数输出 @sys_Table nvarchar(100), --查询表名 @sys_Key varchar(50), --主键 @sys_Fields nvarchar(500), --查询字段 @sys_Where nvarchar(3000), --查询条件 @sys_Order nvarchar(100), --排序字段 @sys_Begin int, --开始位置 @sys_PageIndex int, --当前页数 @sys_PageSize int --页大小 AS SET NOCOUNT ON SET ANSI_WARNINGS ON IF @sys_PageSize < 0 OR @sys_PageIndex < 0 BEGIN RETURN END DECLARE @new_where1 NVARCHAR(3000) DECLARE @new_order1 NVARCHAR(100) DECLARE @new_order2 NVARCHAR(100) DECLARE @Sql NVARCHAR(4000) DECLARE @SqlCount NVARCHAR(4000) DECLARE @Top int if(@sys_Begin <=0) set @sys_Begin=0 else set @sys_Begin=@sys_Begin-1 IF ISNULL(@sys_Where,'') = '' SET @new_where1 = ' ' ELSE SET @new_where1 = ' WHERE ' + @sys_Where IF ISNULL(@sys_Order,'') <> '' BEGIN SET @new_order1 = ' ORDER BY ' + Replace(@sys_Order,'desc','') SET @new_order1 = Replace(@new_order1,'asc','desc') SET @new_order2 = ' ORDER BY ' + @sys_Order END ELSE BEGIN SET @new_order1 = ' ORDER BY ID DESC' SET @new_order2 = ' ORDER BY ID ASC' END SET @SqlCount = 'SELECT @RCount=COUNT(1),@PCount=CEILING((COUNT(1)+0.0)/' + CAST(@sys_PageSize AS NVARCHAR)+') FROM ' + @sys_Table + @new_where1 EXEC SP_EXECUTESQL @SqlCount,N'@RCount INT OUTPUT,@PCount INT OUTPUT', @RCount OUTPUT,@PCount OUTPUT IF @sys_PageIndex > CEILING((@RCount+0.0)/@sys_PageSize) --如果输入的当前页数大于实际总页数,则把实际总页数赋值给当前页数 BEGIN SET @sys_PageIndex = CEILING((@RCount+0.0)/@sys_PageSize) END set @sql = 'select '+ @sys_fields +' from ' + @sys_Table + ' w1 ' + ' where '+ @sys_Key +' in (' +'select top '+ ltrim(str(@sys_PageSize)) +' ' + @sys_Key + ' from ' +'(' +'select top ' + ltrim(STR(@sys_PageSize * @sys_PageIndex + @sys_Begin)) + ' ' + @sys_Key + ' FROM ' + @sys_Table + @new_where1 + @new_order2 +') w ' + @new_order1 +') ' + @new_order2 print(@sql) Exec(@sql) GO
create proc [dbo].[pro_commonpage] ( @pageindex int, ---当前页的索引 @pagesiz int,--一页显示多少条 @tablename nvarchar(100),---要分页的表名 @prikey varchar(50),--要分页的表名的主键 @condtion varchar(5000),----查询条件 @pagecount int out----按照查询条件查询出的总页数 ) as -----第一步构建查询的sql语句-------- declare @sql nvarchar(4000), ---查询语句 @recrdcount int,----记录数据的总行数 @startindex int,---当前页的第一条数据的行号 @endindex int----当前页的最后一条数据的行号 set @sql = 'Select @rCount= count(*) From '+@tablename+' Where 1= 1 ';---查询除所有的数据并得到数据行数 if @condtion is not null and @condtion <>N''---当查询条件不为空的时候和不等于“” begin set @sql=@sql+@condtion;---@sql+查询条件 end print @sql ----利用sp_executesql这个存储过程来执行@sql, --N'@rcount int out 同@sql中的@rcount对应声明变量,将@recrdcount赋值替换@rcount exec sp_executesql @sql,N'@rcount int out',@recrdcount out; ---计算最大分页数 set @pagecount=CEILING(@recrdcount*1.0/@pagesiz);--ceiling函数就是将小数位抹去并在整数位加1, if(@pageindex>@pagecount)---当当前页的页码大于最大页的页码 begin set @pageindex=@pagecount ---设置当前页的页码为最大页的页码 end set @startindex=(@pageindex-1)*@pagesiz+1---设置当前页的起始行号 set @endindex =@pageindex*@pagesiz ----设置当前页的最后一条数据的行号 ---构建分页的sql set @sql='' set @sql='select row_number() over (order by '+@prikey+' asc)as rowid,*from ' + @tablename +' where 1=1'---开窗函数获取当前查询表的数据行数 if @condtion is not null and @condtion <>N'' --如果查询条件不为空 begin set @sql=@sql+@condtion ---为sql加上查询条件 end set @sql = 'Select * From ('+@sql+') as tc where tc.rowid between '+convert(varchar(5),@startIndex)+' and '+convert(varchar(5),@endIndex)+''; print @sql exec (@sql) GO
相关推荐
在SQL Server中,由于不支持MySQL中的`LIMIT`关键字,我们通常使用其他方法来实现分页查询。SQL Server 2008引入了`TOP`和`ROW_NUMBER()`等关键字,使得分页查询成为可能。以下是对这些方法的详细解释: 1. **TOP...
SQL Server 2005微软官方权威参考书. 公球公认SQL Server 2005 经典著作.. 数据库“铁人”、微软MVP胡百敬先生鼎力推荐 微软SQL Server 总部Principal Group 项目经理朱凌志鼎力推荐 本书详细介绍了数据...
本文将详细介绍三种主流数据库(SQL Server、MySQL和Oracle)中的分页SQL语句实现方法。 #### SQL Server 的分页SQL语句实现 SQL Server 支持通过`TOP`关键字来实现分页查询。具体实现方式如下: 1. **查询第M页...
### ObjectDataSource 分页小结 在本篇小结中,我们将深入探讨如何使用ASP.NET中的`ObjectDataSource`控件实现数据分页,并结合具体的代码示例进行详细解析。`ObjectDataSource`是ASP.NET中用于从数据源加载数据的...
ASP.NET 2.0+SQL Server 2005全程指南 目录 基础篇 第1章 ASP.NET概述及环境配置 1.1 认识ASRNET 1.1.1 .NET Framework框架 1.1.2 ASP.NET功能与特性 1.1.3 ASP.NET与ASP的区别 1.2 搭建ASP.NET开发环境 1.2.1...
- SQL Server:使用`TOP`和`OFFSET`,例如`SELECT TOP (page_size) * FROM table ORDER BY id OFFSET (page - 1) * page_size ROWS`。 2. 游标实现分页: - JDBC提供ResultSet的next()方法,可以逐行读取数据,...
本文将详细介绍一个SQL Server存储过程的分页实现方法,并通过前后端代码示例来说明其具体应用。 #### 存储过程实现原理 此存储过程名为`pagelist`,其主要功能是根据传入的参数获取指定表中的数据,并进行分页...
在数据库管理领域,Microsoft SQL Server 2005 和 Oracle 是两种广泛使用的数据库管理系统,它们在语法上存在一些显著的差异。以下是一些关键的区别,对于熟悉一种系统但初次接触另一种系统的开发人员来说,这些差异...
String a = "jdbc:sqlserver://" + a1 + ";DatabaseName=KQ"; int rowTotal = 0; String sql = "SELECT COUNT(*) FROM basic WHERE deptid='" + data.getId() + "'"; try { Connection con = DriverManager....
首先,实现分页的基本存储过程需要创建一个SQL Server存储过程,它通过SQL语句来实现分页逻辑。分页的关键在于确定当前页以及每页的记录数,然后查询出指定页的数据。为了提高效率,通常建议使用表的标识列作为分页...
小结** JSP分页技术的关键在于正确地构造SQL查询,并在客户端提供易于使用的导航。`xia.jsp`文件可能是这个分页示例的具体实现,你可以下载并研究其代码,了解如何将数据库查询、分页逻辑和页面展示结合在一起。...
第4章 Visual C# 2008与数据库 案例1 利用DataGridView控件显示数据库信息 案例2 数据库数据记录单 案例3 利用下拉列表框动态查询数据库信息 案例4 利用ListView控件导航数据库信息 ...本章小结
#### 小结 通过本文的详细介绍,我们不仅了解了如何在C#中连接和操作SQL Server及Access数据库,还学习了如何优雅地处理异常和管理数据库资源。掌握了这些核心技能,你将能够在开发过程中更加高效、安全地处理...
1.5 小结 37 第2章 使用标准控件 38 2.1 显示信息 38 2.1.1 使用Label控件 38 2.1.2 使用Literal控件 42 2.2 接收用户输入 44 2.2.1 使用TextBox控件 44 2.2.2 使用CheckBox控件 50 2.2.3 使用RadioButton控件 52 ...
2.2 sqlserver数据库 第3章 系统分析 3.1功能需求分析 3.2业务流程分析 3.3数据流程分析 3.4本章小结 第4章 系统设计 4.1系统设计思想 4.2系统总体设计 4.3数据库设计 4.3.1概念模型设计 4.3.2数据库表设计 4.3.3...
在使用ASP(Active Server Pages,活动服务器页面)技术进行网站开发时,分页功能是常常需要实现的一个功能,它能够提高网站的用户体验,尤其在数据量大的情况下,分页可以避免一次性加载过多数据导致页面加载缓慢。...
【VB\SQL数据库课程设计】是一项针对VB编程语言与SQL Server数据库进行的实践性课程,目的是让学生掌握如何结合这两种技术来构建一个业务管理系统。在这个项目中,学生将设计一个平面设计公司的业务管理系统,涵盖从...