简单分页存储过程

 1 create proc proc_page(
 2 @tableName varchar(50),--要进行分页的表名
 3 @columnFilds varchar(500),--要查询的列,默认是*,查询所有的列
 4 @whereStr varchar(500),--查询条件,不带where 关键字
 5 @pKcol varchar(50),--主键列
 6 @sortType int,--排序类型,0顺序,1倒叙
 7 @pageSize int ,--每页的显示数量,即分页大小
 8 @pageNow int, --当前页码
 9 @countRecord int output,--表的总记录数
10 @pageCount int output--总页数,总页数 = 总记录数
11 )
12 as
13     declare @sqlCount nvarchar(500) --获取总记录数、总页数的sql语句
14     declare @sqlstr varchar(8000)--获取分页信息的SQL语句
15     declare @sortstr varchar(50)--排序语句,如‘ order by id asc‘
16 begin
17     if (@sortType=0) set @sortstr = ‘ order by ‘+ @pKcol +‘ asc ‘ --如果排序类型等于0就代表是升序
18     if (@sortType=1) set @sortstr = ‘ order by ‘+ @pKcol +‘ desc ‘--否则就是降序
19
20     begin
21
22      set @sqlCount=‘select @countRecord=count([‘+@pKcol+‘]),@pageCount= CEILING(count(‘+@pKcol+‘)*1.0/‘+cast(@pageSize as varchar(10))+‘)from ‘+@tableName+@whereStr
23      print @sqlCount
24      exec SP_EXECUTESQL @sqlCount,N‘@countRecord int output,@pageCount int output‘,@countRecord output,@pageCount output
25      --这里面的关键点是执行时用到的SP_EXECUTESQL函数
26     end
27
28     begin
29         set nocount on
30         if(@pageNow<2)--查询第1页
31             set @sqlstr=‘select top ‘+cast(@pageSize as varchar(10))+‘ ‘+@columnFilds+‘ from ‘+ @tableName +@whereStr+@sortstr
32         else--查询第2页以后的其他页
33            begin
34             set @sqlstr=‘select top ‘+cast(@pageSize as varchar(10))+‘ ‘+@columnFilds+‘ from ‘+ @tableName +‘ where ‘+@pKcol+‘ > (
35              select max(‘+@pKcol+‘) from (select top ‘+cast(@pageSize*(@pageNow-1) as varchar(10))+‘ ‘+@pKcol+‘ from ‘+@tableName+@sortstr+‘ ) as temptable
36             )‘+@sortstr
37            end
38         set nocount off
39         print @sqlstr--打印出当前的sql
40         exec (@sqlstr)--执行sql
41     end
42
43 end
44
45 --调用存储过程
46 declare @countRecord int,@pageCount int
47 exec proc_page ‘teststudents_1‘,‘*‘,‘ ‘,‘id‘,0,10,5,@countRecord output,@pageCount output
48 select @countRecord,@pageCount
49
50 --删除存储过程
51 --drop proc proc_page

时间: 2024-10-11 00:52:32

简单分页存储过程的相关文章

MySql简单分页存储过程

BEGIN DECLARE startIndex int; select COUNT(*) INTO RecordCount from test; SET startIndex = (PageIndex - 1) * PageSize; SELECT * FROM test ORDER BY id DESC LIMIT startIndex,PageSize ; END

【老码农怀旧】一个简单好用的分页存储过程

数据库存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并用一个指定的名称存储起来,以后当需要数据库提供与已定义好的存储过程的功能相同的服务时,只需再次执行该存储过程. 数据库存储过程的优点: (1)存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度. (2)通常,复杂的业务逻辑需要多条 SQL 语句.这些语句要分别

自己写的通用分页存储过程

新手一个,写的最简单的存储过程分页,上代码吧,还请大神们多多调教! 1 USE [BMS] 2 GO 3 /****** Object: StoredProcedure [dbo].[Pages] Script Date: 12/21/2015 11:48:57 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 ALTER PROCEDURE [dbo].[Pages] 9 @page int, --当前页 10

sql 可按任意字段排序的分页存储过程

最近做一个项目,其中有许多部分需要用到分页功能 并且这些需要分页的地方有一个共同的特点,那就是,分页,但并不是按ID(主键)来排序,而是要求按其他有重复值的列进行排序,比如,其中有一个页面,要列出将近1万条客户记录,要求按客户付费金额进行排序,这种情况,如果使用网上流行的通用分页存储过程是行不能的,比如,像下面的分页存储过程虽然很棒,可是,用在这里的话,就无计可施:(这个存储过程是我在CSDN上看到一位前辈高人写的) CREATE PROCEDURE GetRecordFromPage @tbl

几种分页存储过程

过程一: select top N条记录 * from 文章表 where id not in(select top M条记录 id from 文章表 order by id desc ) order by id desc 过程二: select top N条记录 * from 文章表 where id <(select min(id) from (select top M条记录 id from 文章表 order by id desc ) as tblTmp) order by id desc

SQL基础分页存储过程(案例一)

1 --分页 存储过程 案例 2 3 -- 所执行的存储过程 4 create proc pageForUsers 5 @currPage int, --当前页数 6 @pageSize int, --每页多少条记录 7 @count int output --总记录数 8 as 9 declare @firstIndex int 10 declare @lastIndex int 11 declare @sqlText varchar(200) 12 13 --统计总记录数 14 select

多表查询分页存储过程,解决了第二页不显示的问题

SET ANSI_NULLS OFFGOSET QUOTED_IDENTIFIER OFFGO ALTER PROCEDURE [dbo].[UP_Pagination]/****************************************************************** 千万数量级分页存储过程 *****************************************************************参数说明:1.Tables :表名称,视

mysql 如何创建一个简单的存储过程

1 用mysql客户端登入2 选择数据库 mysql>use test3 查询当前数据库有哪些存储过程 mysql>show procedure status where Db='test'4 创建一个简单的存储过程 mysql>create procedure hi() select 'hello'; 5 存储过程创建完毕,看怎么调用它 mysql>call hi();显示结果 mysql> call hi(); +-------+ | hello | +-------+

oracle分页存储过程

oracle分页存储过程: CREATE OR REPLACE PROCEDURE FGK.prc_page (p_tableName in varchar2, --表名 p_strWhere in varchar2, --查询条件 p_orderColumn in varchar2, --排序的列 p_orderStyle in varchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条