这里面介绍一下常用的分页方法:
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
相关推荐
sqlserver2008不支持关键字limit ,所以它的分页sql查询语句将不能用MySQL的方式进行,幸好sqlserver2008提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页。 下面是本人在网上查阅到的几种查询脚本...
SQL Server 2005微软官方权威参考书. 公球公认SQL Server 2005 经典著作.. 数据库“铁人”、微软MVP胡百敬先生鼎力推荐 微软SQL Server 总部Principal Group 项目经理朱凌志鼎力推荐 本书详细介绍了数据...
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...
第4章 Visual C# 2008与数据库 案例1 利用DataGridView控件显示数据库信息 案例2 数据库数据记录单 案例3 利用下拉列表框动态查询数据库信息 案例4 利用ListView控件导航数据库信息 ...本章小结
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...
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...
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.net 4揭秘.第1卷》 第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 ...25.4 小结882
前言. 第1章 Windows窗体技术 案例1.1 多文档MDI应用程序 案例1.2 QQ窗体 案例1.3 卡通窗体, 案例1.4 带有分隔栏并更换主界面背景窗体 案例1.5 半透明渐显动画和渐变窗体 案例1.6 浮动的窗体 ...本章小结
1.7 小结 23 第2章 PHP的基础语法 24 2.1 语言构成与工作原理 24 2.2 常量与变量 25 2.2.1 常量的定义 25 2.2.2 变量的定义 26 2.2.3 变量的作用域 27 2.2.4 动态变量 29 2.3 运算符和关键字 29 2.4 流程控制语法 30...
目录 第1章 JDBC概述 1.1 JDBC简介 1.2 JDBC3.0规范 1.3 JDBC3.0 API的新特点 1.3.1 JDBC 3.0 API的一致性 1.3.2 不赞成的API 1.4 JDBC 3.0中的类和接口 1.4.1 java.sql包中的类和接口及其...9.5 本章小结
ADO.NET 2.0技术内幕(高清 中文 带书签 全) 编辑推荐 核心主题全面涵盖,深入剖析个人精髓;示例丰富,同时提供Visual ...15.6 小结 15.7 常见问题 第Ⅴ部分 附录 附录A 使用其他.NET数据提供程序 附录B 示例和工具
10.4.4 数据分页小结 336 10.5 使用数据库中的图像 337 10.6 小结 338 第11章 使用XML数据 339 11.1 XML的定义 339 11.1.1 XML和HTML的差别 340 11.1.2 标记和元素 343 11.1.3 模式和文档类型定义 346 ...
10.4.4 数据分页小结 336 10.5 使用数据库中的图像 337 10.6 小结 338 第11章 使用XML数据 339 11.1 XML的定义 339 11.1.1 XML和HTML的差别 340 11.1.2 标记和元素 343 11.1.3 模式和文档类型定义 346 ...
1.6 小结 第 2 章 C# 3.0 程序设计基础 2.1 C#程序 2.1.1 C#程序的结构 第一篇窗口与界面编程 7 2.1.2 C# IDE 的代码设置 2.2 变量 2.2.1 定义 2.2.2 值类型 2.2.3 引用类型 2.3 变量规则 2.3.1 命名规则和命名习惯 ...
1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#程序的结构 2.1.2 C# IDE的代码设置 2.2 变量 2.2.1 定义 2.2.2 值类型 2.2.3 引用类型 2.3 变量规则 2.3.1 命名规则和命名习惯 2.3.2 声明并初始化变量 ...
1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#程序的结构 2.1.2 C# IDE的代码设置 2.2 变量 2.2.1 定义 2.2.2 值类型 2.2.3 引用类型 2.3 变量规则 2.3.1 命名规则和命名习惯 2.3.2 声明并初始化变量 ...
1.6 小结 第2章 C# 3.0程序设计基础 2.1 C#程序 2.1.1 C#程序的结构 2.1.2 C# IDE的代码设置 2.2 变量 2.2.1 定义 2.2.2 值类型 2.2.3 引用类型 2.3 变量规则 2.3.1 命名规则和命名习惯 2.3.2 声明并初始化变量 ...