一条sql语句实现分页查询,且能返回记录总数

一条sql语句实现分页查询,且能返回记录总数,第1张

可以是可以,不过土了点,用个子查询。

select top 10 ,(select count(1) from table) as cnt from table where id not in

这样有一个问题。就是你查询出来的每条记录里,都带一个总行数。

-- 第一页

select top 20 from 表 order by no

-- 第二页

select top 20 from (select top 40 from 表 order by no ) t order by no desc

-- 如果你数据库是 sql server 2012 版本的话。 就可以不用上面这么折腾。

楼主,刚刚有个问友和你问的差不多,我刚回答了他的。就直接把刚回答的复制给你看看啦。希望对你有帮助、。

要想分页,首先得做好准备工作。你要先声明每页显示多少条数据,还得获取当前选择的是多少页的页码。有了这两个分页就好办了。

sql如下:select top 10 from tableName

where (id not in(select top 20 from tableName order by Id desc)) order by Id desc

分页需要使用到的一些动态数据如下:

每页显示的数量:自己定义。

总页数:数据总条数/每页显示的条数

当前页码的计算方法:(页码-1)每页显示的数量。比如我要浏览第3页的数据,3从客户端传送过来后,在后台对页码进行处理:(3-1)每页显示的数量(假如是10)算出来后的结果就是20你在把20以参数注入的方式动态添加到上面那个20那里就ok了。

sql中的10表示你每页显示的数据,这里跟10,就代表每页显示10条。(你可以定义一个常量作为每页显示的条数)

where中的20表示不包括前面的20条数据,也就是查询出从第21条到30之间的数据。

不知道我这样说你是否理解,其实只要理解了sql语句,分页就很好做了。

楼上的分页,在10000页以上就非常慢了,我奉献一个我工程中用的存储过程

---查询10000页也在300ms以内

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Description: 分页存储过程,根据传递的参数返回分页的结果

-- Parameters:

-- =============================================

ALTER PROCEDURE [dbo][Proc_GetDataPaged]

-- Add the parameters for the stored procedure here

@StrSelect varchar(max)=null, --欲显示的列(多列用逗号分开),例如:id,name

@StrFrom varchar(max)= null, --表名称,或者是表连接字符串,多表连接例如:student as s inner join dwinfo as dw on sdwbh=dwbh

@StrWhere varchar(max)=null, --查询条件,''代表没有条件,单条件或者多条件,多条件例如:name='啊' and id=10

@StrOrder varchar(max) =null, --排序列(多个排序列用逗号分开),例如:id desc,name as

--@PageCount int output, --总页数

--@ItemCount bigint output, --总记录数

@PageSize int =40, --每页显示条数

@BeginIndex int=1--记录开始数

--@DoCount bit =0 --是否统计总数,为0不统计,为1统计

-- @PageIndex int =1 --当前页

--@ClassCode char(10) =null, --单位编号(班级编号)

AS

BEGIN

SET NOCOUNT ON;

Declare @sql nvarchar(4000);

Declare @totalRecord int;

--@BeginIndex

if (@BeginIndex >1)

set @BeginIndex = @PageSize(@BeginIndex-1);

--计算总记录数

if (@StrWhere ='''' or @StrWhere='' or @StrWhere is NULL)

set @sql = 'select @totalRecord = count() from ' + @StrFrom

else

set @sql = 'select @totalRecord = count() from ' + @StrFrom + ' where ' + @StrWhere

--EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@ItemCount OUTPUT--计算总记录数

declare @SqlQuery varchar(max)

-- if(@PageIndex=1)

if(@BeginIndex=1 or @BeginIndex=0 or @BeginIndex <0)

begin

if(@StrWhere is null)--if(@StrWhere='')

set @SqlQuery='select top '+convert(varchar,@PageSize)

+ ' row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+

' from '+@StrFrom;

else

--set @sql='select top @PageSize from @TableName order by id desc';

--select top @PageSize from @TableName order by id desc;

set @SqlQuery='select top '+convert(varchar,@PageSize)

+ ' row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' where '+@StrWhere;

--exec (@SqlQuery)

-- @SqlQuery

end

else

begin

if(@StrWhere is null)--if(@StrWhere='')

begin

set @SqlQuery='with cte as (

select row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+'

)

select from cte where RowNumber between '+

--convert(varchar,((@PageIndex-1)@PageSize)+1)+' and '+

--

-- convert(varchar,@PageIndex@PageSize)

convert(varchar,@BeginIndex)+' and '+

convert(varchar,@BeginIndex+@PageSize)

--print @SqlQuery

end

else

begin

set @SqlQuery='with cte as (

select row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' where '+@StrWhere+'

)

select from cte where RowNumber between '+

--convert(varchar,((@PageIndex-1)@PageSize)+1)+' and '+

--

-- convert(varchar,@PageIndex@PageSize)

convert(varchar,@BeginIndex)+' and '+

convert(varchar,@BeginIndex+@PageSize)

--print @SqlQuery

end

end

--set @SqlQuery=@SqlQuery+';select @ItemCount =count() from '+@TableName

--set @PageCount=@ItemCount/@PageSize

--print '共'+@PageConut+'页'+@ItemCount+'条'

--print @ItemCount

print @SqlQuery

--select @SqlQuery

exec (@SqlQuery)

END

MYSQL 分页最简单了 SELECT FROM Account WHERE (usertype='base' or usertype='home' or usertype='salse') and logindate is not null order by logindate desc LIMIT 起始行, 每页多少行 LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)

查询可以用if else 去做。

例如:

sql="select from "

``````````````

xh=request("型号")

······

if xh<>"" then sql=sql+" and 型号='"&xh&"'"

分页可以用

<%TurnPage(rs,20,"型号="&xh&"&其他6个参数·······")%>

<%

Sub TurnPage(ByRef Rs_tmp,PageSize,canshu) 'Rs_tmp 记录集 PageSize 每页显示的记录条数;

Dim TotalPage '总页数

Dim PageNo '当前显示的是第几页

Dim RecordCount '总记录条数

Rs_tmpPageSize = PageSize

RecordCount = Rs_tmpRecordCount

TotalPage = INT(RecordCount / PageSize -1)-1

PageNo = RequestQueryString ("PageNo")

'直接输入页数跳转;

If RequestForm("PageNo")<>"" Then PageNo = RequestForm("PageNo")

'如果没有选择第几页,则默认显示第一页;

If PageNo = "" then PageNo = 1

If RecordCount <> 0 then

Rs_tmpAbsolutePage = PageNo

End If

'获取当前文件名,使得每次翻页都在当前页面进行;

Dim fileName,postion

fileName = RequestServerVariables("script_name")

postion = InstrRev(fileName,"/")+1

'取得当前的文件名称,使翻页的链接指向当前文件;

fileName = Mid(fileName,postion)

responsewrite "<table border=0 width='100%'><tr> "

If RecordCount = 0 or TotalPage = 1 Then

ResponseWrite ""

Else

responsewrite "<td align=left style='font-size:12px'> 总页数:<font color=#ff3333>"&TotalPage&"</font>页"

responsewrite "当前第<font color=#ff3333>"&PageNo&"</font>页 </td> "

responsewrite "<td align='right' style='font-size:12px'> "

end if

If RecordCount = 0 or TotalPage = 1 Then

ResponseWrite ""

Else

responsewrite "<a href='"&fileName&"PageNo=1&"&canshu&"'>首页|</a>"

If PageNo - 1 = 0 Then

ResponseWrite "前页|"

Else

responsewrite "<a href='"&fileName&"PageNo="&PageNo-1&"&"&canshu&"'>前页|</a>"

End If

If PageNo+1 > TotalPage Then

ResponseWrite "后页|"

Else

responsewrite "<a href='"&fileName&"PageNo="&PageNo+1&"&"&canshu&"'>后页|</a>"

End If

responsewrite "<a href='"&fileName&"PageNo="&TotalPage&"&"&canshu&"'>末页</a>"

End If

responsewrite "</td></td></tr></table> "

end sub%>

1、首先preparedstatement是statement的子接口,属于预处理 *** 作,与直接使用statement不同的是,preparedstatement在 *** 作的时候,先在数据表中准备好了一条sql语句,但是sql语句的值暂时不设置,而是之后设置。

2、在使用statement的时候,要执行一条完整的失去了,在执行钱使用connection直接创建的。

3、如何获得preparedstatement,在connection接口中,通过preparedstatement(String sql)得到。

4、最后在日期输入的时候,正常情况都是使用javautildate表示日期,在 preparedStatement中需要使用javasqldate类型,如下图所示就完成了。

以上就是关于一条sql语句实现分页查询,且能返回记录总数全部的内容,包括:一条sql语句实现分页查询,且能返回记录总数、mssql的分页查询、sql数据库分页等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/9289932.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存