数据库分页语句(ms sqlserver)
来源:互联网 发布:亲权鉴定软件 编辑:程序博客网 时间:2024/05/01 14:27
第一种方法:
1:基本语句
select top 页大小 * from table1 where id> (select max (id) from (select top ((页码-1)*页大小) id from table1 order by id) as T ) order by id
2:相应存储过程
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 declare @strSQL varchar(5000) -- 主语句 declare @strTmp varchar(110) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @doCount != 0 begin if @strWhere !='' set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere else set @strSQL = "select count(*) as Total from [" + @tblName + "]" end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 else begin if @OrderType != 0 begin set @strTmp = "<(select min" set @strOrder = " order by [" + @fldName +"] desc" --如果@OrderType不是0,就执行降序,这句很重要! end else 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 exec (@strSQL) GO
第二种方法
2:存储过程
CREATE procedure pagination1 (@pagesize int, --页面大小,如每页存储20条记录 @pageindex int --当前页码 ) as set nocount on begin declare @indextable table(id int identity(1,1),nid int) --定义表变量 declare @PageLowerBound int --定义此页的底码 declare @PageUpperBound int --定义此页的顶码 set @PageLowerBound=(@pageindex-1)*@pagesize set @PageUpperBound=@PageLowerBound+@pagesize set rowcount @PageUpperBound insert into @indextable(nid) select gid from TGongwen where fariqi >dateadd(day,-365,getdate()) order by fariqi desc select O.gid,O.mid,O.title,O.fadanwei,O.fariqi from TGongwen O,@indextable t where O.gid=t.nid and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id end set nocount off
第三种方法:
1:
SELECT TOP 页大小 * FROM Table1 WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id)) ORDER BY ID
2:存储过程
CREATE PROCEDURE pagination2( @SQL nVARCHAR(4000), --不带排序语句的SQL语句 @Page int, --页码 @RecsPerPage int, --每页容纳的记录数 @ID VARCHAR(255), --需要排序的不重复的ID号 @Sort VARCHAR(255) --排序字段及规则)AS DECLARE @Str nVARCHAR(4000) SET @Str='SELECT TOP '+CAST(@RecsPerPage AS VARCHAR(20))+' * FROM ('+@SQL+') T WHERE T.'+@ID+'NOT IN (SELECT TOP '+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+' '+@ID+' FROM ('+@SQL+') T9 ORDER BY '+@Sort+') ORDER BY '+@SortPRINT @Str EXEC sp_ExecuteSql @StrGO
在数据量大的情况下,第一种方法的效率是最好的。
摘自:http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx
- 数据库分页语句(ms sqlserver)
- SqlServer数据库中的分页语句
- 数据库分页语句(mysql,oracle,sqlserver,DB2)
- SQLserver/Oracle/MySQL数据库分页 SQL语句
- 数据库分页语句(mysql,oracle,sqlserver,DB2)
- 数据库分页语句(mysql,oracle,sqlserver,DB2)
- MS SqlServer 2005 分页处理
- ms sqlserver常用sql语句
- sqlserver分页查询语句
- Oracle,SQLserver 分页语句
- SQLserver分页语句
- sqlserver分页语句
- SQLServer------分页查询语句
- 数据库分页sql语句(mysql,oracle,sqlserver,DB2)
- 数据库MySQL、Oracle、SQLServer、db2分页查询语句
- Ms SqlServer系统数据库概述
- MS SQLServer 批量附加数据库
- MS SQLServer 批量附加数据库
- 使用DB2数据库临时表的注意事项
- 了解DB2数据库优化的几条策略
- 深入分析Windows和Linux动态库应用异同
- IBM DB2 的数据复制、迁移方法
- 推荐几本java学习的“大宝”
- 数据库分页语句(ms sqlserver)
- IIS下开启DISCUZ论坛URL静态化功能
- 用lucene为数据库搜索建立增量索引
- LVS_EX_FULLROWSELECT
- 事务机制
- 软件项目交易
- 选择博客网站
- like 通配符
- 每天JAVA多一点