select top 页大小 *
from table1
where id>
(select max (id) from
(select top ((页码-1)*页大小) id from table1 order by id) as T
)
order by id
drop procedure pagination3
go
CREATE Procedure pagination3(
@tblName varchar(255),--表名
@strGetFields varchar(1000)='*',--需要返回的列
@fldName varchar(255) ='',--排序的字段名
@PageSize int =10,-- 页尺寸(每页记录数)
@PageIndex int =1,--页码
@doCount bit =0,-- 返回记录总数, 非0值则返回记录数
@OrderType bit =0,-- 设置排序类型, 非0值则降序
@strWhere varchar(1500)='')-- 查询条件 (注意: 不要加 where)
AS
begin
declare @strSQL varchar(5000)-- 主语句
declare @strTmp varchar(1100)-- 临时变量
declare @strOrder varchar(4000)-- 排序类型
if @doCount!=0
begin
if @strWhere!=''
set @strSQL='select count(*) asTotal from ['+@tblName+'] where '+@strWhere
else set @strSQL='select count(*) as Total from ['+@tblName+']'
end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType!=0 --降序(desc)
begin
set @strTmp='<(select min'
set @strOrder='order by['+@fldName+'] desc' --如果@OrderType不是0,就执行降序,这句很重要!
end
else --升序(asc)
begin
set @strTmp='>(select max'
set @strOrder='order by['+@fldName+'] asc'
end
if @PageIndex=1 --页码
begin
if @strWhere!=''
set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from ['+@tblName+'] where'+@strWhere+''+@strOrder
else
set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from ['+@tblName+']'+@strOrder --如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin --以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from ['+@tblName+'] where ['+@fldName+'] '+@strTmp+'(['+@fldName+']) from (select top'+str((@PageIndex-1)*@PageSize)+'['+@fldName+'] from ['+@tblName+']'+@strOrder+') as tblTmp)'+@strOrder
if @strWhere!=''
set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from ['+@tblName+'] where ['+@fldName+']'+@strTmp+'(['+@fldName+']) from (select top'+str((@PageIndex-1)*@PageSize)+'['+@fldName+'] from['+@tblName+'] where'+@strWhere+''+@strOrder+') as tblTmp) and '+@strWhere+' '+@strOrder
end
end
--print ''+@strSQL
exec (@strSQL)
end
GO
分享到:
相关推荐
SQL分页最佳解决方案,对我帮助很大,希望给大家也有帮助
SQL Server 分页方案比拼
关于SQL Server SQL语句查询分页数据的解决方案
常用sql分页解决方案,里面提供了3个解决方法,希望对大家有帮助!
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为...
通用sql分页存储过程,提供12参数可供选择。其中,提供两种分页方案被选择和相关排序方式,支持自定义查询、自定义排序等
利用SQL游标存储过程分页方案,以前用过,应该还行
SQL中分页解决方案 涉及主流的DB Oracle、SQL Server、Mysql
行式引擎按页取数只适用于Oracle,mysql,hsql和sqlserver2008及以上数据库,其他数据库,如access,sqlserver2005,sqlite等必须编写分页SQL。今天我们以Access数据库为例介绍需要写分页SQL的数据库怎样利用行式的...
SQL Server 存储过程的分页方案比拼
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
SQLServer海量数据库的查询优化及分页算法方案
SQL Server 存储过程的分页方案比拼.doc
access下仿Sql存储过程的分页方案 .rar
介绍了SQL分页语句的三种方案,有需要的朋友可以参考一下
4) 传统的分页, 分段式分页(每页内分为多段)归根结底是对数据集做一次切割, 映射到mysql的sql语法上, 就是根据输入求得limit子句, 适用场景为数据集变化频率低 5) since_id类分页, 其本质是假定已有数据无变化, 将...
《SQL Server海量数据库的查询优化及分页算法方案》,忘了从哪里搞来的。
详细探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页!
本文介绍了 大数据sql的优化,及大数据分页 性能优化的解决方案