关于sql server分页查询的问题
来源:互联网 发布:软件开发面试 编辑:程序博客网 时间:2024/05/30 23:45
1.通过sql语句实现查询分页,比如想访问Northwind数据库里Orders表,假如外面页面显示是每页10行,想获得第2页的数据,也就是11-20行 ,可以通过如下sql语句
select * from Orders where OrderID in(
select top 10 OrderID from Orders where OrderID in(select top 20 OrderID from Orders order by OrderID asc) order by OrderID desc)
order by OrderID asc
首先看红色部分 查询前20个OrderID,并以OrderID进行顺序排序,注意OrderID是主键,这里最好是主键,因为主键查询速度是最快的,用的是索引查询。
然后看蓝色和红色部分,当红色部分查询了前20个记录的主键,那么蓝色代码就在这20里查询出后10个,查询出的结果同样是OrderID主键
最后在看外面的代码,查询出你想查询的字段,在这里查的是*,这样就可以查询出11-20行记录
这种查询方法速度很快,因为sql查询优化器完全懂得怎么做,里面查询全部是基于索引查询,各种各样的数据库都可以用这种方法,就是代码比较复杂,如果基本查询本身就很复杂了,那么查询代码就不怎么好写了
2.通过存储过程实现查询分页,同样是访问NorthWind数据的Orders表的11-20行记录
首先建立如下代理存储过程
create procedure up_zbh_DivPageBySql
@strSql varchar(8000),
@nPageSize int,
@nPageCount int
as
SET NOCOUNT ON
DECLARE @P1 INT,
@nRowCount INT
EXEC sp_cursoropen @P1 OUTPUT, @strSql, @scrollopt = 2, @ccopt = 335873, @rowcount = @nRowCount OUTPUT
IF (@P1 != 0)
BEGIN
@nPageCount AS nPage
SET @nPageCount = (@nPageCount - 1) * @nPageSize + 1
EXEC sp_cursorfetch @P1, 32, @nPageCount, @nPageSize
EXEC sp_cursorclose @P1
END
go
然后在在基于这个存储过程建立真正要用的存储过程,如下
create proc proc_SearchOrders
@pageSize int --每页列数
@pageIndex int --第几页
as
begin
up_zbh_DivPageBySql 'select * from Orders',@pageSize,@pageIndex
end
这个查询存储过程会返回2张表,第一张是空表,取第2张就行了。改查询速度也非常快,而且操作也简单,适合常规使用,但是只能在sql server使用,因为查询的核心代码全部是调用的sql内部的存储过程,如果是其他数据库的话就要另外想办法了哦!
- 关于sql server分页查询的问题
- 关于SQL Server SQL语句查询分页数据的解决方案
- 关于SQL Server SQL语句查询分页数据的解决方案
- 关于SQL 分页的查询
- Sql Server 分页查询
- SQL Server 分页查询
- SQL Server 分页查询
- SQL Server查询分页
- sql server 分页查询
- Sql Server 分页查询
- 《Sql Server 分页查询》
- sql server分页查询
- SQL SERVER 分页查询
- Sql server 分页查询
- SQL SERVER 分页查询
- SQL Server中分页查询和排序问题
- 关于分页查询问题
- 解决Sql server分页时第二页以上查询结果不正常的问题
- 用GPU实现Cellular Texture
- eclipse 快捷键介绍
- 郁闷的c280 ,台电,你应该给个说法
- 墙
- 发现了个比HomeShare更好用的单网卡共享上网的东西Sygate
- 关于sql server分页查询的问题
- Java 精髓
- 微软与三维图形:抑制竞争和创新的案例研究
- 'com.sun.tools.javac.Main',not found的解决办法
- Java类装载体系结构
- VC调试入门
- 不学习已经很多年,唉.
- 进程编程1 – Unix环境高级编程7章读书笔记
- tes