SQL 分页实现
--通用分页
ALTER PROCEDURE [dbo].[Sys_Pagination_1]
@tblName VARCHAR(2000) , -- 表名
@strGetFields VARCHAR(1000) = '*' , -- 需要返回的列
@fldName VARCHAR(255) = '' , -- 排序的字段名
@PageSize INT = 10 , -- 页尺寸
@PageIndex INT = 1 , -- 页码
@OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序
@strWhere VARCHAR(2500) = '' -- 查询条件 (注意: 不要加 where)
AS
BEGIN
--处理开始点和结束点
DECLARE @strOrder VARCHAR(400) -- 排序类型
DECLARE @MaxCode NVARCHAR(100) --记录个数
DECLARE @StartRecord INT;
DECLARE @EndRecord INT;
DECLARE @TotalCountSql NVARCHAR(4000);
DECLARE @SqlString NVARCHAR(4000);
SET @StartRecord = ( @PageIndex - 1 ) * @PageSize + 1
SET @EndRecord = @StartRecord + @PageSize - 1
IF @OrderType != 0
BEGIN
SET @strOrder = ' order by ' + @fldName + ' desc'
--如果@OrderType不是0,就执行降序,这句很重要!
END
ELSE
BEGIN
SET @strOrder = ' order by ' + @fldName + ' asc'
END
SET @TotalCountSql = N'select @Max_ID = count(*) from ' + @tblName;--总记录数语句
SET @SqlString = N'(select row_number() over (' + @strOrder
+ ') as rowId,' + @strGetFields + ' from ' + @tblName;--查询语句
IF ( @strWhere ! = ''
OR @strWhere != NULL
)
BEGIN
SET @TotalCountSql = @TotalCountSql + ' where ' + @strWhere;
SET @SqlString = @SqlString + ' where ' + @strWhere;
END
--第一次执行得到
--IF(@TotalRecord is null)
-- BEGIN
EXEC sp_executesql @totalCountSql, N'@Max_ID varchar(100) output',
@MaxCode OUTPUT;--返回总记录数
PRINT @totalCountSql
-- END
----执行主语句
SET @SqlString = 'select ' + @strGetFields + ' from ' + @SqlString
+ ') as t where rowId between ' + LTRIM(STR(@StartRecord))
+ ' and ' + LTRIM(STR(@EndRecord));
EXEC(@SqlString)
PRINT @SqlString
RETURN @MaxCode
END
SQL 分页实现的更多相关文章
- sql分页操作
看到了网上关于分页的讲解 对最快的分页语句做了测试 还别说速度真快 总共6w条数据 速度确实so 快 前提是id是主键 或者是索引 declare @page int;--页数 declare @P ...
- SQL Server SQL分页查询
SQL Server SQL分页查询的几种方式 目录 0. 序言 1. TOP…NOT IN… 2. ROW_NUMBER() 3. OFFSET…FETCH 4. 执行 ...
- sql分页代码
//三种sql分页语句 SELECT TOP 分页尺寸 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM Blob ...
- SQL分页查询结果不一致
今天遇到了SQL分页查询结果不一致的情况,一看代码,原来是没加排序查询!!分页查询最好加排序,且以唯一性高的字段进行排序,如ID,时间等,以保持每页查询结果的准确! PS:又帮别人擦屁股!!
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
- oracle15 pl/sql 分页
PL/SQL分页 编写分页过程 无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程: ...
- [转]关于SQL分页存储过程的分析
[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...
- SQL点滴16—SQL分页语句总结
原文:SQL点滴16-SQL分页语句总结 今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 *from Orders orderid from Or ...
- oracle sql 分页
Oracle实现分页时,需要引入一个rownum的函数,rownum可以给记录一个类似于id的字段. 以下收整理了常用的几种sql分页算法,数据库以Oracle中emp为例.查询结果如下: SQL&g ...
- pageHelper多个sql分页
之前有个需求,在一个页面中需要有多个sql分页查询然后放到一个list中,展示,但是会出现一个bug,就是每次分页都会展示第一条查出的所有的数据: 第一页 第二页 因为是截的生产环境,第一条数据被处理 ...
随机推荐
- C语言学习笔记--C语言中的逗号表达式
逗号表达式:exp1,exp2,epx3,...,expN; (1)逗号表达式是 C 语言中的“粘贴剂” (2)逗号表达式用于将多个子表达式连接为一个表达式 (3)逗号表达式的值为最后一个子表达式的值 ...
- java不定参数列表---乔老师没讲,但是传智有讲
**public static void sum(int i,int...srgs){** package com.xml; public class dremo1 { public static v ...
- ssh功能模块——paramiko
参考官网文档:http://docs.paramiko.org/
- badblocks 检查磁盘损坏的区块
Linux badblocks命令用于检查磁盘装置中损坏的区块. 语法: badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数] ...
- Unusual Sequences
题意: 求解合为 y 的总体 gcd 为 x 的正整数非空序列个数. 解法: 特判一下后,原问题等价于合为 s = y/x 的整体gcd为1的正整数序列个数. 1.$ans = \sum_{\sum{ ...
- C++中栈结构建立和操作
什么是栈结构 栈结构是从数据的运算来分类的,也就是说栈结构具有特殊的运算规则,即:后进先出. 我们可以把栈理解成一个大仓库,放在仓库门口(栈顶)的货物会优先被取出,然后再取出里面的货物. 而从数据的逻 ...
- 阶段3-团队合作\项目-网络安全传输系统\sprint1-传输子系统设计\第3课-加密传输优化
对之前的传输系统进行加密,使之成为加密的网络传输系统 客户端编程模型 通过以上模型对传统的TCP传输模型进行优化 首先完成初始化工作,它是要在创建socket之前完成 主要是以上四个函数的实现,那么这 ...
- Git删除master branch中最近一次的提交
在做一个项目的过程中,需要删除master brach中最近一次的提交,需要在Git repository中删除 采用步骤如下: 1. 在Visual Studio中打开项目,进入到master br ...
- UVa 11020 Efficient Solutions (BST)
题意:给按顺序给定 n 个人群,用x和y来描述,如果有没有任何一个x' < x y' <= y 或 x '<= x y' <= y,那么这个群体就是优势群体, 让你求出每放入一 ...
- 《JavaScript语言精粹》第二章-语法 简单笔记
注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...