`
javaboychina
  • 浏览: 62096 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

三种SQL分页查询的存储过程

 
阅读更多
--根据MAX(MIN)ID
CREATE PROC [dbo].[proc_select_id]
@pageindex int=1,--当前页数
@pagesize int=10,--每页大小
@tablename VARCHAR(50)='',--表名
@fields VARCHAR(1000)='',--查询的字段集合
@keyid VARCHAR(50)='',--主键
@condition NVARCHAR(1000)='',--查询条件
@orderstr VARCHAR(500),--排序条件
@totalRecord BIGINT OUTPUT--总记录数
AS
    IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
    IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
    IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
    DECLARE @sql NVARCHAR(4000)
    --IF(@totalRecord IS NULL)
    --BEGIN
        SET @sql=N'SELECT @totalRecord=COUNT(*)'
            +N' FROM '+@tablename
            +N' WHERE '+@condition
        EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
        SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
        EXEC(@sql)
    END
    ELSE
    BEGIN
        DECLARE @operatestr CHAR(3),@comparestr CHAR(1)
        SET @operatestr='MAX'
        SET @comparestr='>'
        IF(@orderstr<>'')
        BEGIN
            IF(CHARINDEX('desc',LOWER(@orderstr))<>0)
            BEGIN
                SET @operatestr='MIN'
                SET @comparestr='<'
            END
        END
        SET @sql=N'SELECT top '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid+@comparestr
            +N'(SELECT '+@operatestr+N'('+@keyid+N') FROM '+@tablename+N' WHERE '+@keyid
            +N' IN (SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '+@tablename+N' WHERE '
            +@condition+N' '+@orderstr+N')) AND '+@condition+N' '+@orderstr
        EXEC(@sql)
    END
GO
 
 
--根据ROW_NUMBER() OVER
CREATE PROC [dbo].[proc_select_page_row]
@pageindex INT=1,--当前页数
@pagesize INT=10,--每页大小
@tablename VARCHAR(50)='',--表名
@fields VARCHAR(1000)='*',--查询的字段集合
@keyid VARCHAR(50)='',--主键
@condition NVARCHAR(1000)='',--查询条件
@orderstr VARCHAR(500),--排序条件
@totalRecord BIGINT OUTPUT--总记录数
AS
    IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
    IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
    IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
    DECLARE @sql NVARCHAR(4000)
--  IF @totalRecord IS NULL
--  BEGIN
        SET @sql=N'SELECT @totalRecord=COUNT(*)'
            +N' FROM '+@tablename
            +N' WHERE '+@condition
        EXEC sp_executesql @sql,N'@totalRecord bigint OUTPUT',@totalRecord OUTPUT
--END
    IF(@pageindex=1)
    BEGIN
        SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
        EXEC(@sql)
    END
    ELSE
    BEGIN
        DECLARE @StartRecord INT
        SET @StartRecord = (@pageindex-1)*@pagesize + 1
        SET @sql=N'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+ @orderstr +N') AS rowId,'+@fields+N' FROM '+ @tablename+N') AS T WHERE rowId>='+STR(@StartRecord)+N' and rowId<='+STR(@StartRecord + @pagesize - 1)
        EXEC(@sql)
    END
GO
 
 
--根据TOP ID
CREATE PROC [dbo].[proc_select_page_top]
@pageindex INT=1,--当前页数
@pagesize INT=10,--每页大小
@tablename VARCHAR(50)='',--表名
@fields VARCHAR(1000)='',--查询的字段集合
@keyid VARCHAR(50)='',--主键
@condition NVARCHAR(1000)='',--查询条件
@orderstr VARCHAR(500),--排序条件
@totalRecord BIGINT OUTPUT--总记录数
AS
    IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
    IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
    IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
    DECLARE @sql NVARCHAR(4000)
    --IF(@totalRecord IS NULL)
    --BEGIN
        SET @sql=N'SELECT @totalRecord=COUNT(*)'
            +N' FROM '+@tablename
            +N' WHERE '+@condition
        EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
        SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
        EXEC(@sql)
    END
    ELSE
    BEGIN
        SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE  '+@keyid
        +N' NOT IN(SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '
        +@tablename+N' WHERE '+@condition+N' '+@orderstr+N') AND '+@condition+N' '+@orderstr
        EXEC(@sql)
    END
GO
分享到:
评论

相关推荐

    sql Server 通用分页存储过程

    sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程

    C# sql分页存储过程例子

    以下是一个简单的C#结合SQL Server的分页存储过程的例子: 1. 创建存储过程: 在SQL Server Management Studio中,编写如下的存储过程,这个过程接收两个参数:@PageIndex表示当前页号,@PageSize表示每页显示的...

    高效分页存储过程 高效分页存储过程

    本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数:当前页码(PageNumber)和每页记录数(PageSize)。...

    sql分页 sqlserver中存储过程分页

    SQL Server 提供了多种方式进行分页查询,其中一种方式是通过存储过程来实现。 #### 存储过程分页概述 存储过程是一种预先编译好的 SQL 代码块,存储在 SQL Server 数据库中。使用存储过程进行分页查询的好处包括:...

    SqlServer 分页存储过程以及代码调用

    总结,SQL Server的分页存储过程可以帮助我们高效地处理分页查询。正确地设计和调用这些存储过程,可以提升应用的性能并提供更好的用户体验。在实际开发中,根据项目的具体需求,可以对存储过程进行适当的修改和扩展...

    千万级数据分页查询存储过程SQLServer

    本文将深入探讨如何利用SQL Server的存储过程实现高效的大数据分页查询。 首先,理解分页查询的基本概念。分页查询是指从海量数据中按指定的页码和每页大小获取数据,通常用于网页展示或报表生成。在SQL Server中,...

    sqlserver 分页存储过程

    SQL Server 分页存储过程是一种在数据库中实现高效数据分页查询的方法。在大型数据集的展示中,分页是必不可少的,因为它允许用户逐步浏览数据,而不是一次性加载所有记录,从而提高用户体验并减少服务器负载。以下...

    sqlserver+group by分组查询分页存储过程

    根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...

    sql分页存储过程

    sql分页存储过程 CREATE PROCEDURE [dbo].[dbTab_PagerHelper] @TableName VARCHAR(50), --表名 @FieldNames VARCHAR(1000), --显示列名,如果是全部字段则为* @WhereString VARCHAR(256) = NULL, --查询条件 ...

    通用的存储过程sql分页查询语句

    总结,通用的存储过程SQL分页查询语句是数据库开发中的重要工具,它结合了存储过程的复用性和SQL的灵活性,可以高效地处理大数据量的分页查询。通过选择适当的分页方法和优化策略,我们可以进一步提升查询性能,提供...

    通用Sql分页存储过程

    通用sql分页存储过程,提供12参数可供选择。其中,提供两种分页方案被选择和相关排序方式,支持自定义查询、自定义排序等

    SQL通用分页存储过程完整代码

    SQL 通用 分页 存储 过程 完整代码

    sql分页存储过程(无论那个表,表中有多少字段都可以用这一个存储过程)

    根据提供的文件信息,本文将详细解释一种通用的SQL分页存储过程实现方法,该方法能够适应不同的表结构、字段数量,并支持自定义排序字段与筛选条件。 ### SQL 分页存储过程解析 #### 标题说明 标题“sql分页存储...

    oracle分页查询并返回总记录数据存储过程

    Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种高效且灵活的方式。本文将详细介绍如何在 Oracle 中创建一个用于分页查询并返回总记录数的存储过程。 #### 核心概念 1. **存储过程**:存储在...

    最简单的SQL Server数据库存储过程分页

    传统的T-SQL分页方法可能会导致性能问题,尤其是在面对百万级别的数据集时。本文介绍一种简单且高效的SQL Server存储过程实现分页的方法,这种方法仅需提供SQL语句、每页的记录数以及当前页数即可快速完成分页操作。...

    SQL万能分页的存储过程

    对SQL分页的万能存储过程,很全面的分析和描述,请大家支持

    三种SQL分页查询的存储过程代码

    下面是三种SQL分页查询的存储过程代码: 1. 根据MAX(MIN)ID的分页查询 该方法使用MAX或MIN函数来获取当前页的数据。存储过程代码如下: ```sql CREATE PROC [dbo].[proc_select_id] @pageindex int=1,--当前页数 ...

    sql的存储过程-简单分页

    很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术

    asp分页(普通sql查询分页+sql存储过程分页)

    这是我整理的,两种不同方式的分页方法,之前我做过测试的,如果数据量很大的话,然后对数据速度要求比较快的话,还是用sql存储过程分页比较好

Global site tag (gtag.js) - Google Analytics