MSSQL中要想分頁只能借助 row_number() over( order by'') 函數以下是我修改后的一個通用存儲過程,
CREATE PROCEDURE [dbo].[Common_Method_Page]
@columns varchar(max)=N'*', --要显示的列名,用逗号隔开
@tableName varchar(max), --要查询的表名
@tempTableName varchar(50)=N'tempTable',--表名的簡寫
@orderColumnName varchar(max), --排序的列名
@order varchar(max) ='ASC', --排序的方式,升序为asc,降序为 desc
@where varchar(max) = '1=1', --where 条件,如果不带查询条件,请用 1=1
@pageIndex int =1, --当前页索引
@pageSize int =20, --页大小(每页显示的记录条数)
@remarkColumn varchar(max)='', --當多表查詢時,用於查詢副表的字段
@pageCount int=null output, --总页数,输出参数
@records int=null output --總記錄數
as
begin
-- author:MichaelYang
-- modifiedDate :2011-9-7
--這是一個動態分頁的存儲過程
declare @sqlRecordCount nvarchar(max) --得到总记录条数的语句
declare @sqlSelect nvarchar(max) --查询语句
--print ''+@columns +'';
set @columns = ISNULL(@columns,N'*'); --默認查詢出所有的記錄
set @order=ISNULL(@order,N'ASC'); --默認按升序排序
set @pageIndex = ISNULL(@pageIndex,1);--默認從第一頁開始
set @pageSize =ISNULL(@pageSize,20); --設置頁面大小為20條記錄
set @where = ISNULL(@where,N'1=1'); --默認按條件查詢為真
set @tempTableName =ISNULL(@tempTableName,N'tempTable');
set
@sqlRecordCount=N'select @recordCount=count(*) from ' +@tableName + ' where '+ @where
print '[@sqlRecordCount:]'+@sqlRecordCount
declare @recordCount int --保存总记录条数的变量
exec sp_executesql @sqlRecordCount,N'@recordCount int output',@recordCount output ;
--动态 sql 传参
if( @recordCount % @pageSize = 0) --如果总记录条数可以被页大小整除
set @pageCount = @recordCount / @pageSize --总页数就等于总记录条数除以页大小
else --如果总记录条数不能被页大小整除
set @pageCount = @recordCount / @pageSize + 1 --总页数就等于总记录条数除以页大小加1
if(@remarkColumn is null) or (@remarkColumn ='') or (@remarkColumn ='null')
set @sqlSelect = N'select '+@columns+' from (select row_number() over (order by ' +@orderColumnName+' '+@order +') as tempid,* from ' +@tableName+' where '+ @where +') as '+@tempTableName+' where tempid between ' +str((@pageIndex - 1)*@pageSize + 1 ) +' and '+str( @pageIndex * @pageSize)
else
set @sqlSelect = N'select '+@columns+','+@remarkColumn+' from (select row_number() over (order by ' +@orderColumnName+' '+@order +') as tempid,*,'+@remarkColumn+' from ' +@tableName+' where '+ @where +') as '+@tempTableName+' where tempid between ' +str((@pageIndex - 1)*@pageSize + 1 ) +' and '+str( @pageIndex * @pageSize)
print '@sqlSelect:'+@sqlSelect;
exec (@sqlSelect)--执行动态Sql
set @records =@recordCount;
end
分享到:
相关推荐
本压缩包"SQL Server 2005通用分页存储过程.rar"包含了一个名为"SQL Server 2005通用分页存储过程.mht"的文件,很可能是详细讲解如何创建和使用分页存储过程的文档。 首先,我们要理解什么是存储过程。存储过程是预...
SQL Server数据库的通用分页存储过程 非常好用 适用于各种场景开发使用
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
SQL Server 2000下的通用分页存储过程.sql
sql2005通用分页存储过程.非常方便的分页
### 通用分页存储过程知识点解析 #### 一、存储过程概述 在数据库管理系统中,存储过程是一种预先编译并存储在数据库中的SQL程序。它能够接收参数,并根据这些参数执行复杂的逻辑操作,如数据查询、更新等。通过...
这个"java通用分页代码实例"提供了一种适用于任意数据库的解决方案,具有高可移植性和易用性。 分页的核心在于对数据库查询结果进行分割,只返回当前页面所需的数据,同时提供翻页链接或按钮,允许用户浏览更多的...
通用分页方法接口的设计旨在提供一种标准化的、可复用的解决方案,使得不同的数据访问层(如数据库查询、API调用等)都能够方便地进行数据分页操作。下面我们将详细探讨这个主题。 一、分页的基本概念 分页是指将...
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
通用Mysql分页存储过程,支持多表查询。
基于上述方法,可以进一步开发一个通用的分页存储过程,该过程支持任意SQL查询语句和排序规则。 ```sql CREATE PROCEDURE pagination2 ( @SQLn VARCHAR(4000), --不带排序语句的SQL语句 @Page int, --页码 @...
### 高效分页存储过程知识点解析 #### 标题:高效的分页存储过程 - **主要内容**:本文档提供了一个SQL Server中的高效分页存储过程实现方式,旨在通过优化查询逻辑来提升分页功能的执行效率。 #### 描述:存储...
通用sql分页存储过程,提供12参数可供选择。其中,提供两种分页方案被选择和相关排序方式,支持自定义查询、自定义排序等
以下是一个通用分页存储过程的概述: 1. **参数定义**:存储过程需要接收两个主要参数,一个是当前页数(@CurrentPage),另一个是每页记录数(@PageSize)。有时,还需要一个总记录数参数(@TotalRows),用于返回...
SQL 通用 分页 存储 过程 完整代码
根据提供的文件信息,我们可以了解到这段代码是用于创建一个SQL Server中的通用分页存储过程,名为`pagination3`。此存储过程旨在提供一种灵活且高效的方式来处理数据库查询中的分页问题,使得开发人员能够轻松地在...
本文将详细解析"经典的分页、排序SQL 通用存储过程"所涉及的知识点,并给出如何实现这样的存储过程。 首先,分页是数据库查询中的一种优化策略,用于限制每次查询返回的结果数量,从而避免一次性加载大量数据导致的...
本通用分页存储过程经过我的验证,可以使用,支持联表查询,支持单表查询,效率我没测过太多,应该还可以。有需要的拿去用。 如果测试出效率,我们可以交流交流