
可以是可以,不过土了点,用个子查询。
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数据库分页等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)