/*----------------------------------------------------------------------------------
-- 名稱 :Pro_CommonPager
-- 功能說明:萬能分頁程序
-- 輸入資料:
@PageIndex int,--索引页 1
@PageSize int,--每页数量2
@TableName nvarchar(500),--查询表名3
@Order nvarchar(500),--排序的列4
@SelectStr nvarchar(500) = '*',--查询的列5
@WhereCondition Nvarchar(1000)='',--查询条件6
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 7
@Groupby NVarChar(100) = '' ,--分組 8
-- 輸出資料:
@RecordCount int = -1 out,--总行数9
@PageCount int = -1 out,--总页数10
@error nvarchar(100)='' out --錯誤信息11
-- 注意事項:exec Pro_CommonPager 5000,15,'[User]','Id'
本程序本摘自網上﹐經過修改﹐提高了它的效率。
-- 原設計者:Achieve
-- 設立日期:2008/05/15
-- ------------------------ 異動紀錄明細 -------------------------------
-- 異動日期 異動者 異 動 原 因
-- 2008/05/25 me 发现了一另外一种计算总行数的方法,这种方法应该还是比临时表快
EXEC SP_EXECUTESQL @strTmp,N'@RecordCount int output',@RecordCount output
-----------------------------------------------------------------------------------*/
CREATE PROCEDURE [dbo].[Pro_CommonPager]
(
@PageIndex int,--索引页 1
@PageSize int,--每页数量2
@TableName nvarchar(500),--查询表名3
@Order nvarchar(500),--排序的列4
@SelectStr nvarchar(500) = '*',--查询的列5
@WhereCondition Nvarchar(1000)='',--查询条件6
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 7
@Groupby NVarChar(100) = '' ,--分組 8
@RecordCount int=-1 output,--总行数 9
@PageCount int=-1 output,--总页数10
@error nvarchar(100)='' output --錯誤信息11
)
AS
declare @strSQL nvarchar(2000) -- 主语句
declare @strTmp nvarchar(1000) -- 临时变量
declare @strOrder nvarchar(1000) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @Order +' desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @Order +' asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + ' where ' + @Order + '' + @strTmp + '(['
+ @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] from ' + @TableName + '' + @strOrder + ') as tblTmp)'
+ @Groupby + @strOrder
if @WhereCondition != ''
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + ' where ' + @Order + '' + @strTmp + '(['
+ @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] from ' + @TableName + ' where (' + @WhereCondition + ') '
+ @strOrder + ') as tblTmp) and (' + @WhereCondition + ') ' + @Groupby + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @WhereCondition != ''
set @strTmp = ' where (' + @WhereCondition + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + '' + @strTmp + ' ' + @Groupby + @strOrder
end
exec (@strSQL)
if(@@error<>0)
begin
set @error='分頁數據出錯﹗';
return;
end
--print @strSQL
--改進本業計算行數的方法﹐創建一個臨時表用于快速計算行數
--create table #tmp ( counts int );---創建臨時表
--取得總記錄數
IF @WhereCondition <>''
Begin
SET @strTmp = 'SELECT @RecordCount=Count(*) FROM ' + @TableName + ' Where ' + (@WhereCondition)
End
ELSE
Begin
SET @strTmp = 'SELECT @RecordCount=Count(*) FROM ' + @TableName
End
EXEC SP_EXECUTESQL @strTmp,N'@RecordCount int output',@RecordCount output
if(@@error<>0)
begin
set @error='分頁數據出錯﹗';
--drop table #tmp;
return;
end
--select @RecordCount=counts from #tmp
--SET @RecordCount = @@RowCount
-- 获取总页数
-- "CEILING"函数:取得不小于某数的最小整数
SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
if(@@error<>0)
begin
set @error='分頁數據出錯﹗';
--drop table #tmp;
end
return
GO
分享到:
相关推荐
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
根据提供的文件信息,我们可以了解到这段代码是用于创建一个SQL Server中的通用分页存储过程,名为`pagination3`。此存储过程旨在提供一种灵活且高效的方式来处理数据库查询中的分页问题,使得开发人员能够轻松地在...
本通用分页存储过程经过我的验证,可以使用,支持联表查询,支持单表查询,效率我没测过太多,应该还可以。有需要的拿去用。 如果测试出效率,我们可以交流交流
SQL 通用 分页 存储 过程 完整代码
知识点:通用分页存储过程(支持多表) 一、存储过程概述 在数据库管理系统中,存储过程是一种预先编译并存储在数据库中的SQL程序。它能够接收参数,执行一系列操作,如查询、更新数据,并返回结果。存储过程提高...
"Oracle通用分页存储过程"就是为了解决这个问题而设计的。分页存储过程通常包含一系列SQL语句和逻辑,用于从数据库中按指定条件获取特定页码的数据。 在Oracle数据库中,实现分页查询通常涉及到`ROWNUM`伪列或者`...
web中通用分页存储过程,是根据PageIndex来取得相应的页数据,并不是上下翻页,对单字段,多字段均适用,并在百万级数据上测试,分页速度较好。
通用分页存储过程 MSSQL通用分页存储过程
### 2分法-通用分页存储过程 #### 概述 本文档旨在解析一个名为“2分法-通用分页存储过程”的SQL脚本,该脚本采用Top Max模式来实现高效的数据分页功能。这种方法特别适用于处理大量数据(如十万条以上记录)时的...
SQL Server 2000下的通用分页存储过程.sql
效率极高的通用分页存储过程,支持夺表关联。
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
"SQL通用分页存储过程"就是一种专门用于实现分页查询的存储过程,它可以接收用户输入的参数,灵活地返回指定页码的数据。 首先,我们需要理解分页的基本概念。在数据库查询中,如果一次性获取所有数据可能导致内存...
本压缩包"SQL Server 2005通用分页存储过程.rar"包含了一个名为"SQL Server 2005通用分页存储过程.mht"的文件,很可能是详细讲解如何创建和使用分页存储过程的文档。 首先,我们要理解什么是存储过程。存储过程是预...
以下是一个通用分页存储过程的概述: 1. **参数定义**:存储过程需要接收两个主要参数,一个是当前页数(@CurrentPage),另一个是每页记录数(@PageSize)。有时,还需要一个总记录数参数(@TotalRows),用于返回...
通用分页存储过程`UP_GetRecordByPage`就是为了实现这一目标而设计的。这个存储过程允许开发人员根据需要获取数据库表中的指定页数据,而不必为每个表或每个查询编写特定的分页代码。 存储过程是预编译的SQL语句...