`
niunan
  • 浏览: 717503 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

SQL分页语句

    博客分类:
  • SQL
阅读更多
    比较万能的分页:
select top 每页显示的记录数 * from topic where id not in
 (select top (当前的页数-1)×每页显示的记录数 id from topic order by id desc)
 order by id desc

需要注意的是在access中不能是top 0,所以如果数据只有一页的话就得做判断了。。

SQL2005中的分页代码:
with temptbl as (
  SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS Row, 
  ...
)
SELECT * FROM temptbl where Row between @startIndex and @endIndex

分享到:
评论
13 楼 jhlovett 2009-07-30  


下面的结果没有查看哦!!!~
12 楼 jhlovett 2009-07-29  
exec (@strSQL)
print @strSQL  -- 测试用,可在查询的时候看到生成的SQL语句

创建完存储过程后,怎么打印不出来捏!!!

怪啊!
11 楼 niunan 2009-07-22  
自己在网上找了一下。。发现http://hi.baidu.com/fuhengyu/blog/item/adb30aafe4df88c87cd92ae9.html
有个分页存储过程,觉得蛮简单的,弄下来在自己的机子上测试了一下,发现出错,自己更改了一下错误,改后的分页存储过程如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		牛腩
-- Create date: 2009-07-22 12:41
-- Description:	分页,用到了ROW_NUMBER()
-- =============================================
ALTER PROCEDURE [dbo].[proc_ShowPage]
@tblName   varchar(255),       -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列,默认*
@strOrder varchar(255)='',      -- 排序的字段名,必填
@strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC
@PageSize   int = 10,          -- 页尺寸,默认10
@PageIndex int = 1,           -- 页码,默认1
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL   varchar(5000)

if @strWhere !=''
set @strWhere=' where '+@strWhere

set @strSQL=
'SELECT * FROM ('+
	'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+
	'FROM ['+@tblName+'] '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)

exec (@strSQL)
print @strSQL  -- 测试用,可在查询的时候看到生成的SQL语句
10 楼 niunan 2009-03-17  
hotttoy 写道

牛腩老师给我们个demo吧。我们调试总是报错,期待牛腩老师的demo。 谢谢! 我们很想学习 支持牛腩老师!

SQL2000的存储过程的代码已经在回复中给了呀...
9 楼 hotttoy 2009-03-15  
郁闷,调试一下午,没有调试出来。能给个demo吗
谢谢
8 楼 hotttoy 2009-03-15  
牛腩老师给我们个demo吧。我们调试总是报错,期待牛腩老师的demo。
谢谢!
我们很想学习
:idea: 支持牛腩老师!
7 楼 niunan 2009-03-01  
asd300 写道

下面的代码也不行
select top 5 * from news where id not in ( select top (@currentPageIndex-1)*5  id from news order by id desc ) order by id desc


在MSSQL中的存储过程中select top @pageSize from authors这样子是不行的,下面是我写的一个MSSQL的分页存储过程,自己测试是成功了,注意我是在MSSQL中测试的。。。
获取的分页数据是pubs数据库中的authos表
USE [pubs]
GO

/****** Object:  StoredProcedure [dbo].[authors_selectByPage]    Script Date: 03/01/2009 13:38:36 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		牛腩
-- Create date: 20090301 13:24
-- Description:	从pubs数据库中的authors表中选择数据
--				传入选择的页数,每页显示数固定为5条
-- =============================================
CREATE PROCEDURE [dbo].[authors_selectByPage]
	@page int -- 要选择第X页的数据
AS
BEGIN
	declare @pageSize int  -- 每页显示数,固定为5条
	set @pageSize=5
	declare @sql nvarchar(1000)
	set @sql='select top '+convert(varchar(10),@pageSize)+' * from authors where au_id not in
	 (select top '+convert(varchar(20),(@page-1)*@pageSize)+' au_id from authors)'
	exec (@sql)
END

GO
6 楼 asd300 2009-02-27  
下面的代码也不行
select top 5 * from news where id not in ( select top (@currentPageIndex-1)*5  id from news order by id desc ) order by id desc
5 楼 asd300 2009-02-27  
你能写个例子吗?
我的存储过程代码是这样的,
create procedure procNewsSelectPager
@currentPageIndex int
as
begin

select top 5 * from news where id not in ( select top (@currentPageIndex-1)5  id from news order by id desc ) order by id desc
end
老是报错
服务器: 消息 170,级别 15,状态 1,过程 procNewsSelectPager,行 6
第 6 行: '(' 附近有语法错误。

4 楼 niunan 2009-01-31  
asd300 写道

select top 8(2-1) id from news order by id desc 红色部分在SQL2000里面老是报错,如果直接改成8就没问题,

中间那个符号是*,乘以...
(当前的页数-1) 乘以 每页显示的记录数

应该是select top 8*(2-1) id from news order by id desc
3 楼 asd300 2009-01-30  
select top 8(2-1) id from news order by id desc
红色部分在SQL2000里面老是报错,如果直接改成8就没问题,
2 楼 niunan 2009-01-30  
asd300 写道

比较万能的分页语句,试过不行啊,


不知道你是在哪试的,ACCESS里的话就不能是top 0...
1 楼 asd300 2009-01-29  
比较万能的分页语句,试过不行啊,

相关推荐

    SQL分页语句的三种方法的比较

    ### SQL分页语句的三种方法的比较 在数据库应用中,分页是常见的需求之一。对于大型数据集,为了提高用户体验以及减轻服务器负担,通常会采用分页的方式来展示数据。SQL提供了多种实现分页的方法,本文将详细介绍并...

    oracle sql分页语句

    Oracle SQL分页语句是数据库查询中的一个重要概念,它允许我们从海量数据中按需获取特定范围的结果,比如第一页、第二页等。在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、...

    一个高效的SQL分页语句

    ### 一个高效的SQL分页语句 #### 概述 在进行程序开发的过程中,经常会遇到需要处理大量数据的情况。为了提高用户体验,通常会采用分页技术来展示数据,而不是一次性加载所有数据。本文将详细介绍一个高效的SQL...

    sql分页语句

    利用图解完成SQL分页语句的讲解,适合分页自己写代码的学习者

    非常流行的使用的sql分页语句

    根据给定的文件信息,我们可以深入探讨SQL分页技术及其在存储过程中的应用。SQL分页是数据库查询中一个常用且重要的功能,它允许我们从大量数据中分批获取记录,这对于提高数据处理效率和用户体验至关重要。下面,...

    LINQ To SQL实现分页效果源码

    由于LINQ延迟执行,直到你真正遍历结果集时才会执行SQL语句。 ```csharp foreach (var customer in pagedQuery) { // 处理每个customer对象 } ``` 5. **优化性能**:在某些情况下,为了提高性能,你可能需要...

    SQL分页语句的三种方案

    SQL分页语句有多种实现方式,这里我们将详细探讨标题中提到的三种方案。 ### 方案一:`NOT IN`与`TOP` 这种方法基于`NOT IN`子句和`TOP`关键字来实现分页。首先,我们获取第一页的数据(页数为1),然后在主查询中...

    .net生成sql分页高性能语句类

    这个类库允许开发者通过指定表名、所需字段、查询条件和排序方式,自动生成高效的SQL分页语句。这种语句通常基于“ROW_NUMBER() OVER(PARTITION BY...ORDER BY...)"窗口函数,这种方式可以在查询时仅扫描必要的数据...

    分页算法 AspNetPager 分页实例 分页sql语句

    本篇将详细探讨分页算法、AspNetPager控件以及相关的SQL分页语句。 首先,我们来了解分页算法。分页算法的核心目标是将数据库中的大量数据分割成若干个小的、可管理的部分,每次只加载一部分到前端展示。常见的分页...

    sqlserver分页查询语句

    sqlserver分页查询语句;sqlserver分页查询语句;sqlserver分页查询语句;

    SqlServer数据库中的分页语句

    本篇将深入探讨SQL Server实现分页查询的语句及其工作原理。 首先,我们要明白SQL Server分页查询的基本思想:一次查询只返回所需页面的数据,而不是一次性获取所有数据,这样可以减少网络传输量,减轻服务器压力,...

    数据库分页SQL语句实现

    ### 数据库分页SQL语句实现 在开发MIS系统或Web应用系统时,经常会遇到对数据库进行分页处理的需求。这是因为数据量庞大时,一次性加载所有数据会给系统带来很大的负担,同时也会影响用户体验。因此,分页技术成为...

    通用的存储过程sql分页查询语句

    本文将深入探讨通用的存储过程SQL分页查询语句及其背后的原理。 首先,理解存储过程。存储过程是一组预先编译好的SQL语句,存储在数据库服务器中,可以按需调用执行。它的优点包括提高性能、减少网络流量、增强安全...

    分页sql语句以及sql语句语法大全

    提供详细的sql语句,常用sql语句,sql语句的进阶过程

    T-SQL经典分页语句

    以下是对给定文件中提到的T-SQL经典分页语句及其应用场景的深入解析。 ### 单表分页 #### 无条件分页 ```sql SELECT TOP页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP页大小*(页数-1) id FROM table1 ORDER...

    几条常见的数据库分页SQL 语句

    几条常见的数据库分页SQL 语句,针对oracle,sqlserver,mysql三种常见数据库的分页显示。

    在SQL Server中通过SQL语句实现分页查询

    ### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...

Global site tag (gtag.js) - Google Analytics