SqlServer数据库中的分页语句 (sqlserver)

教程大全 2025-07-08 13:37:24 浏览

下文将为您介绍sqlserver数据库中的分页SQL语句,该语句一次查询,数据库只返回一页的数据,供您参考,希望能对您有所帮助。

SqlServer分页SQL语句特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。说明:pagesize: 每页显示记录数cureentpage:当前页数

select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC

例子说明:假如数据库表如下:user_table:id:主键,自增username:字符password:字符

假设有80条记录,每页显示10条记录,id 从1到80现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。

这时该语句应该为:select * from ( select ***0 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC

原理如下:(1)先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC)(2)然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1(3)然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。(4)***在重新排序得到最终我们需要的数据。id在21-30之间。

希望对大家有所帮助。

【编辑推荐】

SQL SERVER数据库中存储过程使用循环语句

Sql Server两个版本中显示所有表信息的语句

SQL Server中一个语句块实现多条语句插入的方法

使用SQL语句查看SQL Server事务日志的方法

SQL语句中UPDATE的三种用法


public class UserPageDAO {DBManager dbManager = null;private int pageItem;//一页显示多少条数据private int pageRow;//当前是多少页private int;

$page = 3; //第几页$pageSize = 10; //每页显示几条记录$offset = ($page-1)*$pageSize; //从第几条记录开始取$sqlStr=select * from can where zt=1 limit $offset,$pageSize; $sqlStr 查出来的结果就是你想要的上面是分页原理 网上找资料看看mysql的limit的用法你就明白了,PHP分页就是用的limit的功能就说这么多了,告诉你原理比单纯给你代码好吧

用SQL语句怎么实现数据库分页?

CREATE PROC sp_PageView@tbname sysname, --要分页显示的表名@Fieldkey nvarchar(1000),--用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段@PageCurrent int=1,--要显示的页码@PageSize int=10,--每页的大小(记录数)@FieldShownvarchar(1000)=, --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段@FieldOrdernvarchar(1000)=,--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序@Where nvarchar(1000)=,--查询条件@PageCountint OUTPUT --总页数ASSET NOCOUNT ON--检查对象是否有效IF OBJECT_ID(@tbname) IS NULLBEGINRAISError(N对象%s不存在,1,16,@tbname)RETURNENDIF OBJECTPROPERTY(OBJECT_ID(@tbname),NIsTable)=0AND OBJECTPROPERTY(OBJECT_ID(@tbname),NIsView)=0AND OBJECTPROPERTY(OBJECT_ID(@tbname),NIsTableFunction)=0BEGINRAISERROR(N%s不是表、视图或者表值函数,1,16,@tbname)RETURNEND--分页字段检查IF ISNULL(@FieldKey,N)=BEGINRAISERROR(N分页处理需要主键(或者惟一键),1,16)RETURNEND--其他参数检查及规范IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1IF ISNULL(@PageSize,0)<1 SET @PageSize=10IF ISNULL(@FieldShow,N)=N SET @FieldShow=N*IF ISNULL(@FieldOrder,N)=NSET @FieldOrder=NELSESET @FieldOrder=NORDER BY +LTRIM(@FieldOrder)IF ISNULL(@Where,N)=NSET @Where=NELSESET @Where=NWHERE (+@Where+N)--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)IF @PageCount IS NULLBEGINDECLARE @sql nvarchar(4000)SET @sql=NSELECT @PageCount=COUNT(*)+N FROM +@tbname+N +@WhereEXEC sp_executesql @sql,N@PageCount int OUTPUT,@PageCount OUTPUTSET @PageCount=(@PageCount+@PageSize-1)/@PageSizeEND--计算分页显示的TOPN值DECLARE @TopN varchar(20),@TopN1 varchar(20)SELECT @TopN=@PageSize,@TopN1=@PageCurrent*@PageSize--第一页直接显示IF @PageCurrent=1EXEC(NSELECT TOP +@TopN+N +@FieldShow+N FROM +@tbname+N +@Where+N +@FieldOrder)ELSEBEGIN--生成主键(惟一键)处理条件DECLARE @Where1 nvarchar(4000),@s nvarchar(1000)SELECT @Where1=N,@s=@FieldKeyWHILE CHARINDEX(N,,@s)>0SELECT @s=STUFF(@s,1,CHARINDEX(N,,@s),N),@Where1=@Where1+N AND a.+LEFT(@s,CHARINDEX(N,,@s)-1)+N=+LEFT(@s,CHARINDEX(N,,@s)-1)SELECT @Where1=STUFF(@Where1+N AND a.+@s+N=+@s,1,5,N),@TopN=@TopN1-@PageSize--执行查询EXEC(NSET ROWCOUNT +@TopN1+N SELECT +@FieldKey+N INTO # FROM +@tbname+N +@Where+N +@FieldOrder+N SET ROWCOUNT +@TopN+N DELETE FROM #+N SELECT +@FieldShow+N FROM +@tbname+N a WHERE EXISTS(SELECT * FROM # WHERE +@Where1+N) +@FieldOrder)END

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐