分页数据查询通用存储过程,单表

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:大师兄
-- Create date: 2018-07-16
-- Description:分页数据查询通用存储过程,单表
-- =============================================
GO
CREATE PROCEDURE [dbo].[PROC_PAGINATIONBY_SINGLE_TABLE]@FEILDS  VARCHAR(1000),--要显示的数据字段,*表示所有字段
@TABLE_NAME VARCHAR(100),--要查询的数据表名称
@PAGE_INDEX INT,--当前页码
@PAGE_SIZE INT,--页面大小
@ORDERTYPE BIT,--当为0时 则为 desc 当为1 时 asc
@ANDWHERE VARCHAR(1000)='',--where语句 不用加where
@ORDERFEILD VARCHAR(100) --排序的字段
as
DECLARE @EXECSQL VARCHAR(2000)
DECLARE @ORDERSTR VARCHAR(100)
DECLARE @ORDERBY VARCHAR(100)
BEGINset NOCOUNT onIF @ORDERTYPE =1 BEGINSET @ORDERSTR =' > ( SELECT MAX(['+@ORDERFEILD+'])'SET @ORDERBY ='ORDER BY '+@ORDERFEILD+' ASC'ENDELSE BEGINSET @ORDERSTR =' < ( SELECT MIN(['+@ORDERFEILD+'])'SET @ORDERBY ='ORDER BY '+@ORDERFEILD+' DESC'ENDIF @PAGE_INDEX =1--当页码是第一页时直接运行,提高速度BEGINIF @ANDWHERE=''SET @EXECSQL ='SELECT TOP '+STR(@PAGE_SIZE)+''+@FEILDS+' FROM '+ @TABLE_NAME +' '+ @ORDERBYELSESET @EXECSQL ='SELECT TOP '+STR(@PAGE_SIZE)+''+@FEILDS+' FROM '+ @TABLE_NAME +' WHERE '+@ANDWHERE+''+ @ORDERBYENDELSEBEGINIF @ANDWHERE=''BEGIN      --以子查询结果当做新表时 要给表名别名才能用SET @EXECSQL ='SELECT TOP'+STR(@PAGE_SIZE)+''+@FEILDS+' FROM '+ @TABLE_NAME +' WHERE '+@ORDERFEILD+@ORDERSTR+' FROM (SELECT TOP '+STR(@PAGE_SIZE*(@PAGE_INDEX-1))+''+@ORDERFEILD+' FROM '+ @TABLE_NAME +' '+@ORDERBY+') AS TEMP) '+ @ORDERBYENDELSEBEGINSET @EXECSQL ='SELECT TOP'+STR(@PAGE_SIZE)+''+@FEILDS+' FROM '+ @TABLE_NAME +' WHERE '+@ORDERFEILD+@ORDERSTR+' FROM (SELECT TOP '+ STR(@PAGE_SIZE*(@PAGE_INDEX-1))+''+@ORDERFEILD+' FROM '+ @TABLE_NAME +' WHERE '+@ANDWHERE+''+@ORDERBY+') AS TEMP) AND '+@ANDWHERE+''+ @ORDERBYENDEND
EXEC (@EXECSQL)--这里要加括号
END

分页数据查询通用存储过程,多表

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:大师兄
-- Create date: 2018-07-16
-- Description:分页数据查询通用存储过程,多表
-- =============================================
GO
Create PROCEDURE [dbo].[PROC_PAGINATIONBY_MULTI_TABLE]
(  @TableName VARCHAR(1000), --表名,多表是请使用 tableA a INNER JOIN tableB b ON a.AID = b.AID@PrimaryKey NVARCHAR(100),    --主键,可以带表头 a.AID@Fields NVARCHAR(2000) = '*',--读取字段@Condition NVARCHAR(3000) = '',--Where条件@CurrentPage INT = 1,    --开始页码@PageSize INT = 10,      --页大小@Sort NVARCHAR(200) = '',--排序字段a.AID desc,b.ID asc@RecordCount INT = 0 OUT
)
AS
DECLARE @strWhere VARCHAR(2000)
DECLARE @strsql NVARCHAR(3900)
IF @Condition IS NOT NULL AND len(ltrim(rtrim(@Condition)))>0BEGINSET @strWhere = ' WHERE ' + @Condition + ' 'END
ELSEBEGINSET @strWhere = ''ENDIF (charindex(ltrim(rtrim(@PrimaryKey)),@Sort)=0)
BEGINIF(@Sort='')SET @Sort = @PrimaryKey + ' DESC 'ELSESET @Sort = @Sort+ ' , '+@PrimaryKey + ' DESC '
END
SET @strsql = 'SELECT @RecordCount = Count(1) FROM ' + @TableName + @strWhere
EXECUTE sp_executesql @strsql ,N'@RecordCount INT output',@RecordCount OUTPUT
IF @CurrentPage = 1 --第一页提高性能
BEGIN SET @strsql = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ '  FROM ' + @TableName + ' ' + @strWhere + ' ORDER BY  '+ @Sort
END
ELSEBEGIN/* 执行动态查询 */    DECLARE @START_ID NVARCHAR(50)DECLARE @END_ID NVARCHAR(50)SET @START_ID = CONVERT(NVARCHAR(50),(@CurrentPage - 1) * @PageSize + 1)SET @END_ID = CONVERT(NVARCHAR(50),@CurrentPage * @PageSize)SET @strsql =  ' SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum, '+@Fields+ 'FROM '+@TableName + @strWhere +') AS XX WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY XX.rownum ASC'END
EXEC(@strsql)
RETURN

转载于:https://www.cnblogs.com/zhao-yi/p/9319344.html

通用分页查询存储过程相关推荐

  1. c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询

    /**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...

  2. Oracle 存储过程之通用分页查询

    在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升 create or replace procedure Sp_QueryDatePage (tableName in varchar ...

  3. Oracle分页查询存储过程(适用于单表查询)

    最近在学习存储过程,网上搜了一些例子,然后自己对照着写了一个相对简单的分页查询... 1.创建包 --/ CREATE OR REPLACE PACKAGE PKG_PAGINATION as TYP ...

  4. java通用分页条件查询_通用分页查询

    packagecom.dao;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;import ...

  5. 实现小数据量和海量数据的通用分页显示存储过程

          建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种 ...

  6. SQL Server 的通用分页显示存储过程

    建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...

  7. SQL Server分页查询存储过程

    CREATE PROCEDURE [dbo].[up_Pager]   @table         varchar(2000), --表名   @col        varchar(50), -- ...

  8. oracle spring 分页查询,SpringJDBC 调用oracle 通用存储过程分页

    我博客前面有写道SpringJDBC调用通用的Oracle存储过程,今天来讲一下通用的Java存储过程带分页的功能,其中里面还有动态查询的SQL拼接,好的,先上代码 1.Java代码 @Autowir ...

  9. 通用分页存储过程(转自邹建)

    --TOP n 实现的通用分页存储过程(转自邹建) CREATE PROC sp_PageView @tbname     sysname,               --要分页显示的表名 @Fie ...

最新文章

  1. python如何封装成可调用的库_在python中如何以异步的方式调用第三方库提供的同步API...
  2. 深入理解JVM之JIT编译器(二)
  3. 多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目
  4. chrom浏览器-F2使用方法一
  5. SAP UI5 初学者教程之四:XML 视图初探试读版
  6. Centos为什么比不过Ubuntu和Debian?
  7. 拓端tecdat|R语言Copula估计边缘分布模拟收益率计算投资组合风险价值VaR与期望损失ES
  8. java p12证书验证_Java s2s通过p12证书和基本授权连接到https
  9. 网络安全防护之主机病毒查杀
  10. iPhone 设备目录结构
  11. (项目名).exe”。已加载符号。 无法查找或打开 PDB 文件。
  12. 论文复现_1:Chinese NER Using Lattice LSTM
  13. js 和 min.js 有什么区别
  14. 终于有个高效率的排列组合算法
  15. 批量修改AD账号Account
  16. 虚拟机使用adb连接板子
  17. 如何找回OneNote 误删、丢失的笔记
  18. 解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
  19. Java8 Stream 遍历数据效率差?实测结果出乎意料~~
  20. python 视频教程大全下载地址

热门文章

  1. 【原创】RMQ - ST算法详解
  2. ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
  3. python的requests库
  4. 实验5 类的继承、派生和多态(2)
  5. linux配置apache2
  6. apt-get 与 apt-cache使用
  7. Django集成celery实战小项目
  8. 动态加载TreeView
  9. [Vue.js] 基础 -- Vue实例
  10. HTML 5 Canvas