CREATE PROC p_Team_GetTemaList @pageindex INT , @pagesize INT , @key...
Declare @rowcount int Declare @intStart int Declare @intEnd int Declare @SQl...,N'@rowcount int output',@rowcount output if @PageIndex=0 and @PageSize=0 --不进行分页,查询所有数据列表 begin...set @SQl='SELECT * from '+cast(@TableName as nvarchar(3000))+' where 1=1 '+@Where end else --进行分页查询数据列表...='select * from(select *,ROW_NUMBER() OVER('+cast(@OrderBy as nvarchar)+') as row from ' set @SQl...+cast(@intEnd as varchar) end --print @SQl exec sp_executeSql @SQl --select @rowcount return @rowcount
在企业级项目开发中,分页查询,获取某一类数据的List列表,这一功能是最普遍也是最重要的功能。...其做法有很多种,例如ORM中自定义分页查询,一般情况下是拼接强类型的查询条件,然后转换成sql语句,查出出分页结果。在ORM转换过程中会稍微损失性能,效率会降低。...对于百万级以上的大数据量,要求查询界面显示速度快,此时手动写存储过程,并且在存储过程中分页是最佳选择。...DECLARE @RowEnd INT; --定义分页结束位置 DECLARE @Sql NVARCHAR(MAX); --拼接SQL语句 DECLARE @SqlSelectResult...EXEC (@Sql); END END GO SQL Server 2012 及以上版本使用OFFSET/FETCH NEXT实现分页查询效率更高 ,
, --指定当前为第几页 @TotalRecord int output --返回总记录数 ) AS BEGIN declare @sql...(@nPageCount - 1)) set @PageIndex = 0 set @StartRecord = (@PageIndex)*@PageSize --组织Sql...+@pageKeyField+' is null ' set @sql='select top '+str(@PageSize)+' '+@querySql+' from ' +@fromSql +'...+@pageKeyField+'='+@keyField +@whereSql2 +@orderBySql end else begin set @sql='select '+@...querySql+' from '+@fromSql+@whereSql+@orderBySql end Exec(@sql) END
1 --分页 存储过程 案例 2 3 -- 所执行的存储过程 4 create proc pageForUsers 5 @currPage int,
数据库用的是Oracle,Mybatis自动封装的分页,sql语句在PLSQL中执行没有问题,放在代码里面运行的时候就报错:未明确定义列。...通过log打印的sql语句拷出来执行,发现嵌套上分页就会报错。 问题原因:sql语句中有个列的别名重复,导致嵌套了分页后,数据库不能确定我们要的到底是哪个列,就会报未明确定义列。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
:(利用Not In和SELECT TOP分页) 语句形式: SELECT TOP 10 * FROM TestTable WHERE (ID NOT IN (SELECT...:(利用ID大于多少和SELECT TOP分页) 语句形式: SELECT TOP 10 * FROM TestTable WHERE (ID > (SELECT MAX(...:(利用SQL的游标存储过程分页) create procedure XiaoZhengGe @sqlstr nvarchar(4000), --查询字符串 @currentpage int, ...通过SQL 查询分析器,显示比较:我的结论是: 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) ...效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用 本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet
output select @p1,@rowcount exec sp_cursorfetch @p1,16,1,20 exec sp_cursorclose @p1 这是个很经典的存储过程分页
--创建人:zengfanlong --创建时间:2014-7-28 10:51:15 --说明:根据公司简写代码获取当前待同步的气瓶档案数据(分页获取) ALTER PROCEDURE [UP_GasBottles_GetSyncData_ByPage...= 0 , @EndPageIndex INT = 0 , @TotalCount INT OUTPUT ) AS BEGIN --(1)、定义SQL...) END ELSE BEGIN --分页获取数据
存储过程与页面调用如下:CREATEPROCEDUREsearch_sp@tblNamevar 存储过程与页面调用如下: CREATE PROCEDURE...from ['+ @tblName + '] '+ @strOrder --如果是第一页就执行以上代码,这样会加快执行速度 end else begin --以下代码赋予了@strSQL以真正执行的SQL
/*通用分页存储过程*/ USE HotelManagementSystem GO IF EXISTS(SELECT * FROM sys.objects WHERE NAME='cndoup_GetPageOfRecords...') DROP PROCEDURE cndoup_GetPageOfRecords GO --创建存储过程 CREATE PROCEDURE cndoup_GetPageOfRecords @pageSize...主键名称 AS BEGIN --存储过程开始...DECLARE @strTemp varchar(300) DECLARE @strSql varchar(5000) --该存储过程最后执行的语句...strOrderType+') AS TabTemp)'+@strOrderType END END EXEC (@strSql) END --存储过程结束
晚上花了1小时重写了MSSQL数据库中的分页存储过程,采用ROW_NUMBER的方式,需要MSSQL2005及以上版本支持。...为什么这么做,有两点: 第一:因为一直觉得采用TOP嵌套的方式太落后,尽管在程序中已经支持自定义View的方式读取分页,但是如果是单表的读取还是走存储过程,现在都MSSQL 2016了,MSSQL都支持...第二:原来用吉日嘎拉的存储过程,有个bug,第1页的最后一行记录还会重复显示在第2页的第一条。修复bug也是硬指标。 完整MSSQL分页存储过程sql脚本如下,拿去不谢。...== -- Author: Troy Cui 崔文远 -- Create date: 2012年03月08日 -- Update date: 2017年12月14日 -- Description: 分页存储过程...SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF,以达到优化存储过程的目的。
我个人认为最好的分页方法是:Selecttop10*fromtablewherei 1。...我个人认为最好的分页方法是: Select top 10 * from table where id>200 写成存储过程,上面的语句要拼一下sql语句,要获得最后大于的哪一个ID号 2。...那个用游标的方式,只适合于小数据量的表,如果表在一万行以上,就差劲了 你的存储过程还比不上NOT IN分页,示例: SELECT Top 10 * FROM Customers WHERE Customerid...用临时表自定义分页和使用游标自定义分页都不好!
这样就可以提高存储过程的性能。 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。...由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。...存储过程的优点 1、存储过程允许标准组件式编程 存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。...2、存储过程能够实现较快的执行速度 如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。...3、存储过程减轻网络流量 对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。
存储过程 什么是存储过程 创建调用与删除 变量声明 参数定义 流程语句 查看存储过程 什么是存储过程 创建一组为了完成特定功能的SQL语句集 之后需要用到时就可以直接用存储过程名使用 创建的存储过程保存在数据库的数据字典中...从而提高效率,将循环完毕后所有要执行的语句一起执行 */ 查看存储过程 查看所有存储过程 SHOW PROCEDURE STATUS; 查看指定数据库中的存储过程 SHOW PROCEDURE STATUS...int 函数对比存储过程 不能用临时表,只能用表变量,有些函数不能用,存储过程限制少 存储过程处理的功能比较复杂,而函数实现的功能针对性强, 存储过程可以执行修改表的操作,但是函数不能执行一组修改全局数据库状态的操作...存储过程的参数有in,out,inout三种,函数只有in,存储过程声明时不需要返回类型,而函数需要描述返回类型,且函数中必须包含一个有效的return语句 存储过程一般是作为独立部分来执行,而函数可以作为查询语句的一个部分来调用...,由于函数可以返回一个表对象,所以在查询中位于from关键字后面,sql语句中不可以含有存储过程
什么是存储过程?...存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了...存储过程的好处? 1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。...2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。...--创建存储过程 CREATE PROCEDURE 存储过程名称 AS 需要查询的SQL语句 GO --调用存储过程 EXECUTE 存储过程名称 --删除存储过程 drop procedure 存储过程名称
1、创建存储过程P1,查询每个学生的修课门数,要求列出学生学号、姓名及修课门数。...Student join Grade on Grade.StudentID=Student.StudentID group by Student.StudentID,StudentName go 2、创建存储过程...Department on Department.DepartmentID=Class.DepartmentID where DepartmentName=@departmentname go 3、创建存储过程...Department.DepartmentID=Class.DepartmentID where DepartmentName=@departmentname and Sex='男' go 4、创建存储过程...from Student join Class on Class.ClassID=Student.ClassID where ClassName=@cname and Sex='女' go 7、创建存储过程
int, --指定当前为第几页 @TotalRecord int output --返回总记录数 ) AS BEGIN declare @sql...StartRecord = (@PageIndex)*@PageSize + 1 set @EndRecord = @StartRecord + @PageSize - 1 --组织Sql...语句 set @sql ='(select row_number() over (order by '+ @orderBySql +') as rowId,'+@querySql+' from '+ @...fromSql+@whereSql;--查询语句 set @sql ='select * from ' + @sql + ') as t where rowId between ' + ltrim(str...='select '+@querySql+' from '+ @fromSql+@whereSql+@orderBySql end Exec(@sql) END
SQL> create table t_book(bookid varchar2(3),bookname varchar2(50),publish varchar2(50)); Table created...SQL> SQL> create or replace procedure sp_add_book(bookid in varchar2, bookname in varchar2,publish...replace package sp_pack_pagebycursor as type p_cursor is ref cursor; end sp_pack_pagebycursor; / --利用存储过程来实现分页功能...number:=curpage*pagerownum; --执行 begin --定义数据库查询sql v_sql:='select * from (select t....open res_cursor for v_sql; --查询总记录数 v_sql:='select count(*) from '||tablename; execute immediate v_sql
MySQL数据库中,自定义存储过程查询表中的数据,带有分页功能。具体实例如下代码: 1 DROP PROCEDURE IF EXISTS `sampledb`....5 IN pageIndex INT, /*当前页*/ 6 IN pageSize INT, /*每页记录数*/ 7 OUT pageCount INT,/*总记录分页数...from @sql; /*预处理 自定义sql字符串*/ 15 execute stmt; /*执行自定义sql语句*/ 16 deallocate prepare stmt; /*释放预处理资源...pageSize; 25 else 26 set pageCount=@recordCount div pageSize + 1; 27 end if; 28 29 /*分页显示数据...31 prepare stmt from @sql; /*预处理 自定义sql字符串*/ 32 execute stmt;/*执行自定义sql语句*/ 33 deallocate prepare
领取专属 10元无门槛券
手把手带您无忧上云