本人觉得这个ASPnetPager 分页存储过程不错,就转来给大家分享一下吧!

USE [dbPMN]
GO

/****** Object: StoredProcedure [dbo].[GetListPage] Script Date: 07/07/2011 17:07:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetListPage]
(
@tblName nvarchar(200), ----要显示的表或多个表的连接
@fldName nvarchar(500) = '*', ----要显示的字段列表
@pageSize int = 1, ----每页显示的记录个数
@page int = 10, ----要显示那一页的记录
@pageCount int = 1 output, ----查询结果分页后的总页数
@Counts int = 1 output, ----查询到的记录数
@fldSort nvarchar(200) = null, ----排序字段列表或条件
@Sort bit = 0, ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
@strCondition nvarchar(4000) = null, ----查询条件,不需where
@ID nvarchar(150), ----主表的主键
@Dist bit = 0 ----是否添加查询字段的 DISTINCT 默认0不添加/1添加
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(4000) ----存放动态生成的SQL语句
Declare @strTmp nvarchar(4000) ----存放取得查询结果总数的查询语句
Declare @strID nvarchar(4000) ----存放取得查询开头或结尾ID的查询语句

Declare @strSortType nvarchar(10) ----数据排序规则A
Declare @strFSortType nvarchar(10) ----数据排序规则B

Declare @SqlSelect nvarchar(50) ----对含有DISTINCT的查询进行SQL构造
Declare @SqlCounts nvarchar(50) ----对含有DISTINCT的总数查询进行SQL构造

if @Dist = 0
begin
set @SqlSelect = 'select '
set @SqlCounts = 'Count(*)'
end
else
begin
set @SqlSelect = 'select distinct '
set @SqlCounts = 'Count(DISTINCT '+@ID+')'
end

if @Sort=0
begin
set @strFSortType=' ASC '
set @strSortType=' DESC '
end
else
begin
set @strFSortType=' DESC '
set @strSortType=' ASC '
end
--------生成查询语句--------
--此处@strTmp为取得查询结果数量的语句
if @strCondition is null or @strCondition='' --没有设置显示条件
begin
set @sqlTmp = @fldName + ' From ' + @tblName
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
set @strID = ' From ' + @tblName
end
else
BEGIN
set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
end

----取得查询结果总数量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
declare @tmpCounts int
if @Counts = 0
set @tmpCounts = 1
else
set @tmpCounts = @Counts

--取得分页总数
set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize

/**//**当前页大于总页数 取最后一页**/
if @page>@pageCount
set @page=@pageCount

--/*-----数据分页2分处理-------*/
declare @pageIndex int --总数/页大小
declare @lastcount int --总数%页大小

set @pageIndex = @tmpCounts/@pageSize
set @lastcount = @tmpCounts%@pageSize
if @lastcount > 0
set @pageIndex = @pageIndex + 1
else
set @lastcount = @pagesize

--//***显示分页
if @strCondition is null or @strCondition='' --没有设置显示条件
begin
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分数据处理
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strFSortType+')'
+' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @page = @pageIndex-@page+1 --后半部分数据处理
if @page <= 1 --最后一页数据显示
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+')'

+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
end

else --有查询条件
begin
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分数据处理
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName +' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' Where (1>0) ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType+')'
+' ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @page = @pageIndex-@page+1 --后半部分数据处理
if @page <= 1 --最后一页数据显示
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+')'
+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
end
CREATE TABLE #TEMPLATE(counts INT, mypagecount INT)
INSERT INTO #TEMPLATE(Counts,mypageCount) VALUES (@Counts,@pageCount)
SELECT * FROM #TEMPLATE
DROP TABLE #TEMPLATE
------返回查询结果-----
exec sp_executesql @strTmp
--print @strTmp
SET NOCOUNT OFF

GO

转载于:https://www.cnblogs.com/waren168/archive/2011/07/07/2100301.html

AspNetPager 万能分页存储过程(转来的)相关推荐

  1. SQL 高效的万能分页存储过程

    代码如下: USE [Blog] IF OBJECT_ID('Proc_Paging', 'P') IS NOT NULL --删除同名存储过程DROP PROC Proc_Paging GO CRE ...

  2. ASP.NET调用Oracle分页存储过程并结合ASPnetpager分页控件 实现分页功能

    之前用的是GridView自带的分页功能,那速度啊慢的真实不行  ,决定自定义分页  Oracle库里有5W多条数据 AspnetPager做的还是不错,拿过来用 Oracle 分页存储过程: cre ...

  3. oracle万能分页代码,Oracle万能分页法的存储过程

    Oracle万能分页法的存储过程 --创建一个包,在包中定义一个 游标类型 create or replace package testfenyepackage as type test Oracle ...

  4. oracle万能分页代码,oracle高效分页存储过程代码

    oracle高效分页存储过程代码 create or replace package p_page is -- author : pharaohs -- created : 2006-4-30 14: ...

  5. 微软企业库调用Oracle分页存储过程

    存储过程: CREATE OR REPLACE PACKAGE pkg_tableType IS procedure FY ( TableName varchar2, -- 表名 getFields  ...

  6. 用于jqGrid获取SQL Server中数据的简单分页存储过程及sp_executesql的一点使用方法...

    之前我第一篇有关jqGrid JSON数据的获取是动态拼接的SQL语句(因为是Access数据库),然后我自己也用SQL Server中的数据作了测试,为了方便写了一个分页的存储过程,过程中也认识了下 ...

  7. 目前用到的两个分页存储过程:

    目前用到的两个分页存储过程: 第一个,取得数据总行数 Code set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [sq8re ...

  8. (转)大数据量分页存储过程效率测试附代码

    大数据量分页存储过程效率测试附代码 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存: ...

  9. [百万级]通用存储过程.分页存储过程

    /*  名称:spAll_ReturnRows  输入:  输出:  调用:   EXEC spAll_ReturnRows 'SELECT  * FROM 表名', 页号, 返回记录数, '主键', ...

最新文章

  1. 什么是 WMI?From MSDN
  2. C中的野指针—如何避免
  3. vue 实现动态增加输入框_vue实现一个6个输入框的验证码输入组件
  4. xpcom java_[Mozilla] JavaXPCOM 的jar 包概述
  5. 1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
  6. 数据库:MySQL、SqlServer、Oracle对比
  7. java aop execution_Spring AOP -- execution表达式
  8. 【杭电多校2020】Minimum Index【Lyndon Word】
  9. 干货集锦:200+生信范文、30+款软件、12类图片素材PPT,今年的SCI稳了!(附下载)...
  10. java 柱状图jar_GitHub - mafulong/NetworkExper: 计网实验,抓包,java,jigloo界面开发,柱状图,文件自定义保存...
  11. matlab 量化 策略,【策略分享】Matlab量化交易策略源码分享
  12. 23亿美元大市场,NFV做好了准备吗?
  13. 【codevs1553】互斥的数
  14. linux 正则表达式
  15. matlab函数建模例题,数学建模matlab上机实训题目答案
  16. Spring实战第五章idea复现
  17. 2007.5 同航驾驶培训公司网站
  18. 外贸客户催货催的很急的原因
  19. 局域网游戏联机大厅建主模式实现附(Unity)
  20. IDEA如何配置 Gradle 及 Gradle 安装过程(详细版)

热门文章

  1. 从数据仓库到大数据平台再到数据中台(内附13张架构图)
  2. 超多种类的报表模板,填上数据就能用,全拿走!
  3. Address already in use: bind JVM端口被占用解决方法
  4. 帆软报表登录背后得逻辑
  5. 华为云龙api自动化工具_聊聊华为GDE刚发布的一体化低门槛开发平台ADC 2.0
  6. java thread类_Java多线程原理及Thread类详解
  7. wps python 自动化_请教下 Python 高手,如何用 Python 自动化操作 Excel?
  8. 周老师打酒喝光回 递归
  9. pytorch中tensor类型转换
  10. CSDN Cookbook by Eric