`

通用分页存储过程(SQL Server 2005+)

 
阅读更多
复制代码
if object_ID('[proc_SelectForPager]') is not null
    Drop Procedure [proc_SelectForPager]
Go
Create Proc proc_SelectForPager
(
  @Sql varchar(max) ,
  @Order varchar(4000) ,
  @CurrentPage int ,
  @PageSize int,
  @TotalCount int output
)
As
/*Andy 2012-2-28 */
Declare @Exec_sql nvarchar(max)
                
Set @Exec_sql='Set @TotalCount=(Select Count(1) From ('+@Sql+') As a)'
Exec sp_executesql @Exec_sql,N'@TotalCount int output',@TotalCount output
 
Set @Order=isnull(' Order by '+nullif(@Order,''),' Order By getdate()')
 
if @CurrentPage=1 /*经常会调用第1页,这里做特殊处理,少一层子查询*/
    Set @Exec_sql='
    ;With CTE_Exec As
    (
        '+@Sql+'
    )
    Select Top(@pagesize) *,row_number() Over('+@Order+') As r From CTE_Exec Order By r
    ' 
Else
    Set @Exec_sql='
    ;With CTE_Exec As
    (
        Select *,row_number() Over('+@Order+') As r From ('+@Sql+') As a 
    )
    Select * From CTE_Exec Where r Between (@CurrentPage-1)*@pagesize+1 And @CurrentPage*@pagesize Order By r
    '
 
 
Exec sp_executesql @Exec_sql,N'@CurrentPage int,@PageSize int',@CurrentPage,@PageSize
 
Go
复制代码

 

调用方法:

1.单表:

Exec proc_SelectForPager @Sql = 'Select * from contacts a where a.ContactType=1', -- varchar(max)
        @Order = '', -- varchar(4000)
        @CurrentPage = 3, -- int
        @PageSize = 20, -- int
        @TotalCount = 0 -- int

2.多表联接:

复制代码
Exec proc_SelectForPager @Sql = 
    'Select a.Staff,a.OU,b.FName+b.FName as Name 
            from staffOUHIST a 
                inner join Staff b on b.ID=a.Staff and a.ExpiryDate=''30001231''
        ', -- varchar(max)
        @Order = '', -- varchar(4000)
        @CurrentPage = 3, -- int
        @PageSize = 20, -- int
        @TotalCount = 0 -- int
复制代码

 

注:在@Sql 中不能使用CTE。

分享到:
评论

相关推荐

    sql Server 通用分页存储过程

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

    Sql Server 通用分页存储过程(适用与 BootStrap Table)

    通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    sqlserver分页存储过程+gridview实例+通用方法(sqlserverr通用)

    首先,我们来理解SQL Server分页存储过程的工作原理。分页通常涉及到两个关键参数:当前页号(@CurrentPage)和每页记录数(@PageSize)。存储过程通过计算出开始和结束的记录索引,然后使用`OFFSET-FETCH`或`TOP-N`...

    Sql Server 通用分页存储过程(BootStrap Table)

    Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    SQL Server 2000下的通用分页存储过程

    SQL Server 2000下的通用分页存储过程.sql

    sql server 2008通用分页

    SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。

    SQL Server2005通用分页存储过程.rar

    本压缩包"SQL Server 2005通用分页存储过程.rar"包含了一个名为"SQL Server 2005通用分页存储过程.mht"的文件,很可能是详细讲解如何创建和使用分页存储过程的文档。 首先,我们要理解什么是存储过程。存储过程是预...

    通用的SQL server分页存储过程

    下面是一个通用分页存储过程的示例: ```sql CREATE PROCEDURE dbo.GetPagedData @TableName NVARCHAR(128), -- 表名 @ColumnToOrder NVARCHAR(128), -- 排序字段 @SortOrder VARCHAR(4), -- 排序方式(ASC或...

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

    ### SQL Server 的通用分页显示存储过程 #### 知识点概述 在现代Web应用程序开发中,分页是一项重要的功能,它能够有效地管理和展示大量数据,提升用户体验并优化服务器资源的利用。传统的分页方法,如ADO记录集...

    sql server 通用分页存储过程

    1.查询返回的表、列名以及排序列没有写死,可以根据需要将这些放到存储过程的输入参数中; 2.适用于所有需要分页的单表或多表联合查询。

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

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

    SQL Server2005通用分页存储过程

    一个通用的万能分页存储过程 很好用 很方便

    SQL Server 2000 通用分页过程

    本文将深入探讨一个针对 SQL Server 2000 的通用分页存储过程。该存储过程采用 `TOP + MAX(ID)` 的方法实现分页功能,并强调了关键字(`Keyword`)选择对于性能的影响。 #### 存储过程设计 此存储过程名为 `p_...

    通用分页存储过程+通用分页存储过程

    根据提供的文件信息,我们可以了解到这段代码是用于创建一个SQL Server中的通用分页存储过程,名为`pagination3`。此存储过程旨在提供一种灵活且高效的方式来处理数据库查询中的分页问题,使得开发人员能够轻松地在...

    经典的分页、排序SQL 通用存储过程.rar

    本文将详细解析"经典的分页、排序SQL 通用存储过程"所涉及的知识点,并给出如何实现这样的存储过程。 首先,分页是数据库查询中的一种优化策略,用于限制每次查询返回的结果数量,从而避免一次性加载大量数据导致的...

    通用分页存储过程.sql

    SQL Server数据库的通用分页存储过程 非常好用 适用于各种场景开发使用

    Sqlserver2005数据库级别异步分页

    3. **通用分页存储过程**: 为了优化分页性能,可以创建一个通用的存储过程。这个存储过程通常会利用ROW_NUMBER()函数生成行号,根据用户请求的页码和每页记录数来选择特定范围的行。这样可以避免全表扫描,提高...

    基于Sql Server通用分页存储过程的解决方法

    本文主要探讨的是如何使用存储过程实现SQL Server 2005及以上版本的通用分页解决方案。 传统的SQL Server 2000分页方法在处理大量数据时性能较低,而在SQL Server 2005中引入了`ROW_NUMBER()`函数,极大地提升了...

    SQL通用分页存储过程

    "SQL通用分页存储过程"就是一种专门用于实现分页查询的存储过程,它可以接收用户输入的参数,灵活地返回指定页码的数据。 首先,我们需要理解分页的基本概念。在数据库查询中,如果一次性获取所有数据可能导致内存...

Global site tag (gtag.js) - Google Analytics