SQL存储过程实现分页
来源:互联网 发布:狸窝dvd刻录软件 编辑:程序博客网 时间:2024/05/16 15:18
第一种:简单的分页实现
DECLARE @pagenum AS INT, @pagesize AS INTSET @pagenum = 2 --指定显示的页码SET @pagesize = 3 --每页的条数SELECT *FROM (SELECT ROW_NUMBER() OVER(ORDER BY score[字段] DESC, speaker[字段]) AS rownum, * FROM SpeakerStats[表名]) AS DWHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize第二种:多表联合的分页查询
三张表:Discuss_Table
Talk_Table
User_Table
DECLARE @pagenum AS INT, @pagesize AS INTSET @pagenum = 2 --指定显示的页码SET @pagesize = 3 --每页的条数SELECT * FROM(SELECT ROW_NUMBER() over(ORDER BY D_id DESC) AS rownum,a.*,b.*,c.* FROM(Discuss_Table AS a INNER JOIN Talk_Table as b ON a.Titleid=b.T_id)JOIN User_Table as c ON a.User_id=c.U_id WHERE c.UserName='zhangfugui')as tbWHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
第三种:完整的分页查询
CREATE PROCEDURE SP_PAGE @TableName varchar(50), --表名 @Fields varchar(5000) = '*', --字段名(全部字段为*) @OrderField varchar(5000), --排序字段(必须支持多字段) @sqlWhere varchar(5000) = Null, --条件语句(不需要附加where) @pageSize int, --每页多少条记录 @pageIndex int = 1 , --指定当前为第几页 @TotalPage int output, --返回条数 @OrderType bit --设置排序类型,1 升序 0 值则降序 AS BEGIN declare @strOrder varchar(400) --排序类型 BEGIN Tran --开始事务 --执行SQL语句拼接Declare @sqlquery nvarchar(4000); Declare @totalRecord int; --计算总记录数 --如果没有条件语句IF (@SqlWhere='' or @sqlWhere is NULL) SET @sqlquery = 'select @totalRecord = count(*) from ' + @TableNameELSE SET @sqlquery = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere --执行查询数据操作EXEC sp_executesql @sqlquery,N'@totalRecord int OUTPUT',@totalRecord OUTPUT --计算总记录数 --计算总页数 SET @TotalPage = Ceiling((@totalRecord+0.0)/@pagesize) --计算页总数 IF @OrderType = 0 --如果@OrderType是0,就执行降序 BEGINSET @strOrder = ' order by [' + @OrderField +'] desc' ENDELSE --升序排列BEGIN SET @strOrder = ' order by [' + @OrderField +'] asc' END IF (@SqlWhere ='''' or @SqlWhere='' or @sqlWhere is NULL) SET @sqlquery = 'Select * FROM (select ROW_NUMBER() Over( '+@strOrder+' ) as rowId,' + @Fields + ' from ' + @TableName ELSE SET @sqlquery = 'Select * FROM (select ROW_NUMBER() Over( '+@strOrder+' ) as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere --处理页数超出范围情况 IF @PageIndex<=0 SET @pageIndex = 1 IF @pageIndex>@TotalPage SET @pageIndex = @TotalPage --处理开始点和结束点 Declare @StartRecord int Declare @EndRecord int --开始节点为1SET @StartRecord = (@pageIndex-1)*@PageSize + 1 --最后节点为页面节点数SET @EndRecord = @StartRecord + @pageSize - 1 IF @OrderType = 0 BEGIN SET @strOrder = ' order by rowid desc' --如果@OrderType是0,就执行降序,这句很重要!END ELSE BEGIN SET @strOrder = ' order by rowid asc' END --继续合成sql语句 SET @sqlquery = @sqlquery + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord) + ' '+@strOrder -- 执行SQL语句 @sqlquery Exec(@sqlquery) --------------------------------------------------- IF @@Error <> 0 BEGINROLLBACK Tran RETURN -1 END ELSE BEGIN COMMIT Tran RETURN @totalRecord ---返回记录总数 End END
0 0
- SQL存储过程实现分页
- SQL:利用存储过程实现分页
- 用sql存储过程实现分页
- Sql分页存储过程以及实现
- sql server 存储过程实现分页
- Sql分页存储过程以及实现
- SQL分页存储过程的实现
- sql 存储过程分页
- sql 存储过程分页
- sql分页存储过程
- sql分页存储过程
- sql 存储过程分页
- sql 存储过程分页
- SQL 存储过程---分页
- 分页存储过程--sql
- sql存储过程 分页
- sql 存储过程分页
- SQL 分页存储过程
- MySQL 命令集
- Linux进阶——Linux中查看CPU信息
- Linq查询结果集比对应的sql语句查询结果集不一致,存在重复结果
- OC简便语法 语法糖
- HDU 1158 Employment Planning (DP)
- SQL存储过程实现分页
- 快逸V5数据源配置
- 黑马程序员 java学习笔记(day09)
- hdu 4939 Stupid Tower Defense DP
- 大律法(OTSU法)
- 学习v$sql,v$sqlarea,v$sqltext,v$sqlstats和v$sql_plan
- Struts2笔记四之Ognl
- linux内核线程对信号的处理过程
- Struts2笔记五之Struts标签