sqlserver2005使用row_number() over分页的实现方法,需要的朋友可以参考下。
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR>
例子:
复制代码 代码如下:
select * from (
select *, ROW_NUMBER() OVER(Order by a.CreateTime DESC ) AS RowNumber from table_name as a
) as b
where RowNumber BETWEEN 1 and 5
将会返回table表
其中有一列名字为 RowNumber, 编号从1开始
示例:
xlh row_num
1700 1
1500 2
1085 3
710 4
有了row_num 编号之后是不是很方便分页呀! 哈哈
只要使用
where RowNumber between
就可以实现分页了 呵呵(从此分页就是这么简单)
例子:
复制代码 代码如下:
select *
from(
select ROW_NUMBER() OVER( ORDER BY PSIO.CreateTime DESC ) AS RowNumber,PSIO.SeqNo,PSIO.CreateTime from dbo.Output PSIO
inner join Album PPA on PSIO.PPAID=PPA.PPAID
where PPA.PPAID=103--PPAID=3.PPAID
) T where RowNumber BETWEEN 1 and 5 order by 1
在当前select里面不能采用 RowNumber字段,并且不能使用排序
方式一
select top @pageSize * from company where id not in
(select top @pageSize*(@pageIndex-1) id from company)
方式二ROW_NUMBER()OVER
--ROW_NUMBER() 就是生成一个有顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ID)
--还必须添加OVER语句以便告诉SQL Server你希望怎样添加行序号。
select getdate()
select * from company where id in (
--搜索出settable表中所有的编号,也就是company表中的id,这里只不过要得到num(即有顺序的编号)
select id from
--搜索出出表中的所有的id,并且新建一列num用来存取排序的编号,并且把这张表赋值给settable
(select id,row_number() over (order by id) as
num from company)
as settable
--添加搜索条件页索引和页大小
where num between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize)
select getdate()
方式三
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY id asc) AS rownum,
id
FROM company ) AS D
WHERE rownum BETWEEN (@pageIndex-1)*@pageSize+1 AND @pageIndex*@pageSize
ORDER BY id asc
Sql Server 2000的自定义分页,但是在sql server 2000中,要实现显示某一页,就返回那一页数据的效果的方法实在不尽人意.网上很多通用的分页存储过程,但看着就头大.如果使用我前面提到的使用in,not in,top来进行返回特定页,特殊的限制又会比较多(比如ID要递增).现在Sql Server 2005中提供了一个函数ROW_NUMBER(),可以使自定义分页变得简单许多.
我们先来看看ROW_NUMBER()是干什么的.执行下面这段SQL语句:
SELECT [ReportID],[UserName], [ReportID],
[TimeStart], [TimeEnd],ROW_NUMBER() OVER (ORDER BY ReportID) AS RowNo
FROM [ExecutionLog]
很简单,ROW_NUMBER() 就是生成一个顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ReportID).现在,你看到了自定义分页的影子了吗?:)下面,我们看看怎么具体应用这个RowNo进行分页.
现在,假设我每一页的数据是10条,我们就可以使用如下所示的SQL语句返回指定页的数据:
@"
SELECT TOP 10 *
FROM
(
SELECT top 10 [InstanceName], [UserName], [ReportID],
[TimeStart], [TimeEnd],ROW_NUMBER() OVER (ORDER BY ReportID) AS RowNo
FROM [ExecutionLog]
) AS A
WHERE RowNo > " + pageIndex*10
pageIndex就是我们需要数据的页数.很简单,不是吗?并且,这种方式几乎没有什么限制,因为他相当于对于任何检索,都生成了一个新的排序列.我们就可以使用该列进行自定义分页.
================
下面举个例子:
ROW_NUMBER函数
SQL Server2005为我们引入了一个ROW_NUMBER函数。你是否曾经需要为你的查询结果集做行序号?你有时会发现能够为行做序号是一件很有用的事情。从前,你不得不作棘手的事,像创建一个有序号列的临时表,然后把你的SELECT结果插入到这个临时表中。现在,用ROW_NUMBER函数,你就可以获得添加在你的结果集的增加列中的行序号。为了获得行序号,你只要简单的将ROW_NUMBER函数作为一列添加进你的SELECT语句中。你还必须添加OVER语句以便告诉SQL Server你希望怎样添加行序号。
SELECT ROW_NUMBER() OVER(ORDER BY employee_id) AS 'Row Number', * from
dbo.employee
结果
Row Number employee_id Firstname Lastname soc_sec
1 5623222 Tim Jones 123-65-8745
2 5632111 Rob Kinkad 456-69-8754
3 6365666 Jim Miller 236-56-8989
4 7563333 Joe Roberts 564-89-5555
这个查询返回所有的雇员和一个显示每条记录在哪一行的一个序号。OVER语句使SQL Server基于employee_id列增加行序号。换句话说,产生了行序号,就好像数据按employee_id做了排序。这是很重要的一点,因为你仍然可以改变SELECT的排序顺序。以下面的查询为例:
SELECT ROW_NUMBER() OVER(ORDER BY employee_id) AS 'Row Number', * from
dbo.employee
ORDER BY soc_sec
结果
Row Number employee_id Firstname Lastname soc_sec
1 5623222 Tim Jones 123-65-8745
3 6365666 Jim Miller 236-56-8989
2 5632111 Rob Kinkad 456-69-8754
4 7563333 Joe Roberts 564-89-5555
注意第二个结果集数据是按社会安全编号来排序的,但是行号仍然创建得好像数据是按employee_id排序的。
-------------------------------分页存储过程
IF EXISTS (SELECT * FROM sysobjects where name='P_student')
DROP PROCEDURE P_student
go
CREATE PROCEDURE P_student
@startIndex INT,
@pageSize INT
AS
begin WITH studentList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.stuid ) Row,
O.stuid,O.stuname,O.stuage,O.stuinfo
from student O)
SELECT Row, stuid,stuname,stuage,stuinfo
FROM studentList
WHERE Row between @startIndex and @startIndex+@pageSize-1
end
-------------------分页2---------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Deer_Page]
(
@startIndex INT
,@pageSize INT
,@strSql varchar(5000) ---查询条件
,@TableName varchar(50)
,@DoCount AS bit=1 -- 0值返回记录总数, 非 0 值则返回记录
)
AS
begin tran
IF @DoCount=0
Goto GetCount
Else
Goto GetSearch
GetCount: --返回记录总数
DECLARE @SearchSql AS Nvarchar(4000)
SET @SearchSql= 'SELECT Count(*) AS Total FROM '+@TableName+' WHERE IntReserve1=0'
exec sp_executesql @SearchSql
--print @SearchSql
COMMIT TRAN
return
GetSearch: --返回记录
DECLARE @SqlQuery varchar(4000)
SET @SqlQuery='SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY O.ID ) Row, * from '+@TableName+' O Where IntReserve1=0) as temp
WHERE Row BETWEEN '+cast(@startIndex as varchar) +' and '+cast(@startIndex+@pageSize-1 as varchar)+ @strsql
---print @SqlQuery
execute(@SqlQuery)
COMMIT TRAN
详细出处参考:http://www.jb51.net/article/28919.htm
- 浏览: 1228912 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (883)
- Spring (101)
- Swing (1)
- Mysql (21)
- Js (59)
- Jsp (2)
- Hibernate (19)
- Myeclipse (5)
- SqlServer 2000 (2)
- poi (15)
- Java (70)
- SSH (12)
- Html (47)
- Fusion Charts (1)
- C\C++ (2)
- 汇编 (36)
- Jquery (37)
- Struts2 (6)
- Ubuntu (16)
- powerDesinger (4)
- Jboss (3)
- JAX-RS (13)
- JAXB (5)
- JAX-WS (11)
- JMS (4)
- WebSocket (8)
- PHP (16)
- Flash (1)
- maven (3)
- Oracle (8)
- HttpClient (6)
- sqlserver (19)
- svn (5)
- Tomcat (3)
- Jdbc (3)
- EsayUi (11)
- 微信公众平台 (19)
- IIS (2)
- Freemarker (11)
- Comet (1)
- Spring MVC (85)
- JBoss Seam (3)
- 二维码 (9)
- Spring Security (4)
- Ehcache (3)
- Apache Shiro (7)
- jackson (16)
- JPA (8)
- jcaptcha (2)
- RSA (2)
- Ajax (6)
- 跟我学Shiro (0)
- Spring4 (19)
- 跟我学spring3 (0)
- css (32)
- excel (4)
- Filter (3)
- 微信公众帐号开发教程 (0)
- Android (6)
- log4j (6)
- 淘宝接口 (17)
- 支付集成 (3)
- 单点登录 (3)
- Html5 (27)
- 移动平台前端 (3)
- Linux (44)
- FusionCharts (27)
- Json Jackson Xml (5)
- 方培工作室-微信开发 (0)
- Apache与Tomcat与IIS整合 (10)
- Nginx (17)
- webService (2)
- apache (4)
- lucene (3)
- lodop (2)
- Shiro (3)
- zTree (2)
- ireport (12)
- Servlet3.0 (5)
- 前端美工 (19)
- AngularJS (1)
- C#开发微信门户及应用 (0)
- Shell (3)
- bat脚本 (16)
- Bootstrap (26)
- Less (10)
- photoshop (6)
- Redis (6)
- Mongodb (10)
- MyBatis (3)
- 数据结构 (0)
- 读写分离-主从复制 (0)
- JFinal (0)
- 百度地图api (3)
- hadoop-hbase-hive-spark (3)
- WebStorm (2)
- Quartz (5)
- ios (0)
- Mina (8)
- Android Studio (4)
- Ratchet教程 (0)
- 移动端重构系列 (1)
- cubic-bezier贝塞尔曲线CSS3动画工具 (1)
- nginx+tomcat+memcached集群 (0)
- 集群 (0)
- ZooKeeper (3)
- Dubbo (0)
- vpn (0)
- kafka (0)
- JVM垃圾回收机制 (0)
- 微信小程序 (0)
- Lua (0)
- Hystrix (0)
- Vue.js (0)
- mycat (0)
- Openresty (0)
- springBoot (0)
- 新分类 (0)
- guava (0)
- 大数据 (0)
- Sentinel (0)
最新评论
-
JackMacing:
中文怎么解决?
SpringMVC与iReport(JasperReports) 5.6整合开发实例 -
18335864773:
用pageoffice把.可以实现在线的文档操作.直接转pdf ...
转:使用jasperreport动态生成pdf,excel,html -
linhao0907:
推荐一款轻量开源的支付宝组件:https://github.c ...
关于Alipay支付宝接口(Java版) -
songronghu:
太好了,非常有用,谢谢分享~
Java ConcurrentModificationException 异常分析与解决方案 -
wzwahl36:
http://www.atool.org/json2javab ...
Java下利用Jackson进行JSON解析和序列化
发表评论
-
海量数据处理:十道面试题与十个海量数据处理方法总结
2015-02-10 10:15 517第一部分、十道海量 ... -
java.sql.SQLException: 违反协议异常的一种解释
2015-02-06 10:10 1663一次做应用升级出现了一个问题,描述如下: 升级分为两块 ... -
SQL Server 2008 修改安装路径后安装出错的解决方法
2014-09-20 19:43 6461、安装时如果修改安 ... -
使用WITH AS提高性能简化嵌套SQL
2014-04-14 10:56 1217一.WITH AS的含义 ... -
在sql server中利用with as实现递归功能
2014-04-14 10:55 1061在sql server中利用with as实现递归功能 ... -
Sql学习第三天——SQL关于with ties
2014-04-11 09:40 902Sql学习第三天——SQL 关于with ties Sq ... -
Sql学习第三天——SQL关于使用CTE(公用表表达式)的递归查询
2014-04-10 22:35 696Sql学习第三天——SQL关于使用CTE(公用表表达式)的递 ... -
Sql学习第四天——SQL关于with cube,with rollup和grouping
2014-04-10 22:34 496Sql学习第四天——SQL关于with cube,with ... -
Sql学习第五天——SQL关于apply的两种形式cross apply和outer apply
2014-04-10 22:33 511Sql学习第五天——SQL关于apply的两种形式cros ... -
Sql学习第六天——SQL巩固练习
2014-04-10 22:33 453Sql学习第六天——SQL巩固练习 Sql学习第五 ... -
Sql学习第七天——SQL关于row_number()over()
2014-04-10 22:32 718Sql学习第七天——SQL关于row_number()ove ... -
Using MERGE in SQL Server to insert, update and delete at the same time
2014-04-09 14:08 979ProblemIn a typical data wareh ... -
use batches to delete large number of records in a table
2014-04-08 14:04 477Sometimes it can happen that y ... -
收缩数据库 DBCC SHRINKFILE
2014-04-02 14:15 918数据库中的每个文件都可以通过删除未使用的页的方法来减小。尽管 ... -
SQL Server 2008 清空删除日志文件(瞬间日志变几M)
2014-04-02 11:45 996sql 在使用中每次查询都会生成日志,但是如果你长久不去清理 ... -
虚拟日志文件剖析(转)
2014-04-02 11:24 747每 一个数据库至少有一个日志文件,无论为事务日志定义多 ... -
探讨SQL Server 2008使用的恢复模式
2014-04-02 11:10 717简介 本文将 ... -
sql之left join、right join、inner join的区别
2014-03-12 10:29 694left join(左联接) 返回包括左表中的所有记录和右表 ...
相关推荐
在 SQL Server 2005 中,使用 ROW_NUMBER() 函数可以实现分页功能,这种方法相比于 SQL Server 2000 中的分页方式效率要高出很多。但是,很多人在使用 ROW_NUMBER() 函数时,使用的方法并不正确。 在本文中,我们将...
在SQL Server 2005中,`ROW_NUMBER()`函数是一个非常重要的窗口函数,它在数据处理和查询优化方面发挥着关键作用,特别是在实现存储过程中的分页功能时。本文将深入探讨`ROW_NUMBER()`函数的工作原理,以及如何在...
在SQL Server 2005及以后的版本中,`Row_number()` 成为了实现数据分页的标准方法,因为它既简单又高效。 `Row_number()` 函数的基本语法如下: ```sql ROW_NUMBER() OVER (ORDER BY ordering_column) ``` 在这个...
设置sqlServer使用ROW_NUMBER时不排序 –1.看到NHibernate是这样写的分页,感觉写起来比较容易理解(应该不会有效率问题吧?) –with只是定一个别名? [sql] with query as (select ROW_NUMBER() over(order by ...
1. 分页:可以使用 ROW_NUMBER() OVER 函数来实现数据库的分页功能。 2. 自动添加字段编号:可以使用 ROW_NUMBER() OVER 函数来自动添加字段编号。 3. 数据分析:可以使用 ROW_NUMBER() OVER 函数来对数据进行分析和...
ROW_NUMBER() 函数是 SQL Server 2005 中的新功能,它可以实现数据的分页功能,从而提高数据查询的效率。在本文中,我们将详细介绍 ROW_NUMBER() 函数的使用方法和优点,以及如何使用它来实现高效的数据分页。 ROW_...
总的来说,使用`ROW_NUMBER()`函数结合动态变量或存储过程,可以灵活地在SQL Server中实现高效、可扩展的分页查询,满足各种应用场景的需求。通过理解并掌握这种技术,可以更好地处理大数据量的查询,提升数据库性能...
在SQL Server 2005中,为了实现高效的数据分页功能,开发人员常常会使用窗口函数ROW_NUMBER()配合OVER子句。ROW_NUMBER()函数在SQL Server中扮演着为每行分配唯一序列号的角色,这对于分页查询尤其有用。本文将详细...
本篇将详细探讨两种不同的分页实现方式,一种是使用ROW_NUMBER()函数,另一种是不使用ROW_NUMBER()函数,并分析它们的性能差异。 首先,ROW_NUMBER()函数在SQL Server中被广泛用于生成行号,常用于分页查询。它为每...
本文将探讨两种在SQL Server中实现分页查询的方法:使用`TOP`关键字和使用`ROW_NUMBER()`窗口函数。 在SQL Server 2005之前的版本中,一种常见的分页查询方法是结合`TOP`和子查询来实现。基本思路是首先获取当前页...
总结来说,SQL Server 2005中的四个排名函数各有特点: - `row_number`:为每一行生成一个唯一的序号,不受相同值的影响。 - `rank`:在考虑相同值的情况下分配序号,出现相同值时跳过序号。 - `dense_rank`:同样...
ROW_NUMBER() 函数是 SQL Server 2005 引入的一个重要特性,它使得数据库开发者能够在不支持 LIMIT 关键字的 SQL Server 中实现类似 MySQL 的分页效果。该函数可以为结果集中的每一行分配一个唯一的整数,从而允许...
在SQL Server 2005中,`row_number()` 是一个非常有用的内置函数,它能够为查询结果集中的每一行分配一个唯一的整数。通常,我们利用`row_number()`进行数据分页,但这里我们将讨论如何利用这个函数来删除表中的重复...
综上所述,`ROW_NUMBER()` 在SQL Server中是一种强大的工具,可以用于实现复杂的数据排序和分页,同时结合联接操作和过滤条件,可以高效地处理和展示大量数据。在实际应用中,可以根据业务需求灵活调整 `PARTITION ...
以下将详细讲解SQL Server 2005中分页查询的常用方法。 1. 使用`ROW_NUMBER()`函数: `ROW_NUMBER()`是SQL Server 2005引入的新功能,可以为查询结果集中的每一行赋予一个唯一的行号。在分页查询中,通常结合`TOP`...
`ROW_NUMBER()`函数在SQL Server中被广泛用于实现分页,因为它可以为查询结果集中的每一行分配一个唯一的行号。以下是对使用`ROW_NUMBER()`实现分页的详细解释。 首先,我们来看提供的代码片段: ```sql create ...
在SQL Server 2005中,ROW_NUMBER()、RANK()和DENSE_RANK()是三个重要的排名函数,它们在数据分析和查询优化方面扮演着重要角色。这些函数可以帮助用户更方便地处理排序和分组数据,尤其在处理大量数据时。 1. ROW_...
此外,row_number 函数也可以用于实现分页功能,但需要注意的是,如果将 row_number 函数用于分页处理,over 子句中的 order by 与排序记录的 order by 应相同,否则生成的序号可能不是连续的。 二、rank 函数 ...