通用的SQL数据分页存储过程

CREATE PROCEDURE spGetPageOfRecords
  @pageSize int = 20,                                      -- 分页大小
  @currentPage int ,                                  -- 第几页
  @columns varchar(1000) = '*',                        -- 需要得到的字段
  @tableName varchar(100),                               -- 需要查询的表    
  @condition varchar(1000) = '',                      -- 查询条件, 不用加where关键字
  @ascColumn varchar(100) = '',                       -- 排序的字段名 (即 order by column asc/desc)
  @bitOrderType bit = 0,                                 -- 排序的类型 (0为升序,1为降序)
  @pkColumn varchar(50) = ''                             -- 主键名称

AS
BEGIN                                                                                    
  DECLARE @strTemp varchar(300)
  DECLARE @strSql varchar(5000)                            -- 该存储过程最后执行的语句
  DECLARE @strOrderType varchar(1000)                    -- 排序类型语句 (order by column asc或者order by column desc)

  BEGIN
    IF @bitOrderType = 1                                        -- 降序
      BEGIN
        SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
        SET @strTemp = '<(SELECT min'
      END
    ELSE                                                                      -- 升序
      BEGIN
        SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
        SET @strTemp = '>(SELECT max'
      END

    IF @currentPage = 1                                                -- 第一页
      BEGIN
        IF @condition != ''
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
            ' WHERE '+@condition+@strOrderType
        ELSE
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+@strOrderType
      END

    ELSE                                                                      -- 其他页
      BEGIN
        IF @condition !=''
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
          ' WHERE '+@condition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+
          ' '+@pkColumn+' FROM ' + @tableName + ' where ' + @condition+@strOrderType+') AS TabTemp)'+@strOrderType
        ELSE
          SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
          ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+' '+@pkColumn+
          ' FROM '+@tableName+@strOrderType+') AS TabTemp)'+@strOrderType
      END

  END
  
  EXEC (@strSql)
END 

 

执行代码如下:

--  Test Employees Table on Northwind database
EXEC spGetPageOfRecords 5, 2, 'EmployeeID, LastName, FirstName, Title, City, Region, Country', 'Employees', '', 'EmployeeID', 0, 'EmployeeID'

--  Test Customers Table on Northwind database
EXEC spGetPageOfRecords 10, 6, 'CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, Country', 'Customers', '', 'CustomerID', 0, 'CustomerID'

 

 

时间: 2024-11-02 18:20:43

通用的SQL数据分页存储过程的相关文章

简单谈基于SQL SERVER 分页存储过程的演进

server|存储过程|分页 简单谈基于SQL SERVER 分页存储过程的演进 作者:郑佐日期:2006-9-30 针对数据库数据在UI界面上的分页是老生常谈的问题了,网上很容易找到各种"通用存储过程"代码,而且有些还定制查询条件,看上去使用很方便.笔者打算通过本文也来简单谈一下基于SQL SERVER 2000的分页存储过程,同时谈谈SQL SERVER 2005下分页存储过程的演进. 在进行基于UI显示的数据分页时,常见的数据提取方式主要有两种.第一种是从数据库提取所有数据然后在

Sql 数据分页解决方案

分页|解决|数据 很多开始学习编程的朋友们在使用数据库自定义分页的时候,会遇到写不好数据分页存储过程的问题. 这里我就自己的一点经验和学习心得提供几种数据库内分页的存储过程和大家分享一下. 1. 使用top1.1利用当前记录号(currentnote)和分页页面大小(pagesize)进行分页 create proc GetNextPageInfo2 @pagesize int, --page size @currentnote int --current note As declare @sq

浅谈基于SQL Server分页存储过程五种方法及性能比较

在SQL Server数据库操作中,我们常常会用到存储过程对实现对查询的数据的分页处理,以方便浏览者的浏览. 创建数据库data_Test : create database data_Test GO use data_Test GO create table tb_TestTable --创建表 ( id int identity(1,1) primary key, userName nvarchar(20) not null, userPWD nvarchar(20) not null, u

五种SQL Server分页存储过程的方法及性能比较_MsSql

在SQL Server数据库操作中,我们常常会用到存储过程对实现对查询的数据的分页处理,以方便浏览者的浏览.本文我们总结了五种SQL Server分页存储过程的方法,并对其性能进行了比较,接下来就让我们来一起了解一下这一过程. 创建数据库data_Test : create database data_Test GO use data_Test GO create table tb_TestTable --创建表 ( id int identity(1,1) primary key, userN

五种SQL Server分页存储过程的方法及性能比较

在SQL Server数据库操作中,我们常常会用到存储过程对实现对查询的数据的分页处理,以方便浏览者的浏览.本文我们总结了五种SQL Server分页存储过程的方法,并对其性能进行了比较,接下来就让我们来一起了解一下这一过程. 创建数据库data_Test : create database data_Test GO use data_Test GO create table tb_TestTable --创建表 ( id int identity(1,1) primary key, userN

SQL数据分页查询的方法_MsSql

最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5条了) 方法一: select top 5 * from [StuDB].[dbo].[ScoreInfo] where [SID] not in (select top 10 [SID] from [StuDB].[dbo].[ScoreInfo] order by [SID]) order by

[SQL]学习一下sql数据分页

今天写点啥呢?就数据分页吧.同事说你直接将所有数据库中的数据都返回给我好了,我一并处理.但我说还好现在就几十条测试数据的,如果说是上万条,几十万条数据,我一下子查询数据库都打包发给你,你还要解析,那客户点击了个查询按钮,按照这样做要等到猴年马月,所以说,服务器端只能一点一点的返回给你才是最佳解决方案! sql数据分页有几种方法,首先用最简单最原始的方法,选择top10: select top 10 * from Student where id not in(select top(10*@pag

简析基于SQL SERVER分页存储过程的演进

针对数据库数据在UI界面上的分页是老生常谈的问题了,网上很容易找到各种"通用存储过程"代码,而且有些还定制查询条件,看上去使用很方便.笔者打算通过本文也来简单谈一下基于SQL SERVER 2000的分页存储过程,同时谈谈SQL SERVER 2005下分页存储过程的演进. 在进行基于UI显示的数据分页时,常见的数据提取方式主要有两种.第一种是从数据库提取所有数据然后在系统应用程序层进行数据分页,显示当前页数据.第二种分页方式为从数据库取出需要显示的一页数据显示在UI界面上. 以下是笔

sql server分页存储过程三种实例

例1.用于通用数据分页  代码如下 复制代码 create procedure [dbo].[Pub_DataPager]     @pTableName nvarchar(1000), --表名     @pFieldNames nvarchar(max),--需要查询的字符串,以 ","分割,也可以是'*'     @pWhere nvarchar(max),  --查询条件     @pOrderby nvarchar(max),        --排序字符串,必需字段