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 Server2005通用分页存储过程.rar
SQL Server数据库的通用分页存储过程 非常好用 适用于各种场景开发使用
通用分页存储过程.txt通用分页存储过程.txt通用分页存储过程.txt
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
SQL Server 2000下的通用分页存储过程.sql
通用分页存储过程 适用于分页 的通用存储过程
sql2005通用分页存储过程.非常方便的分页
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
通用Mysql分页存储过程,支持多表查询。
通用sql分页存储过程,提供12参数可供选择。其中,提供两种分页方案被选择和相关排序方式,支持自定义查询、自定义排序等
SQL 通用 分页 存储 过程 完整代码
本通用分页存储过程经过我的验证,可以使用,支持联表查询,支持单表查询,效率我没测过太多,应该还可以。有需要的拿去用。 如果测试出效率,我们可以交流交流
通用分页存储过程 MSSQL通用分页存储过程
DB 2通用分页存储过程DB 2通用分页存储过程DB 2通用分页存储过程DB 2通用分页存储过程DB 2通用分页存储过程
不错的经典的分页、排序SQL 通用存储过程,可以大大节省Web数据库中大批量记录展现的性能问题。
web中通用分页存储过程,是根据PageIndex来取得相应的页数据,并不是上下翻页,对单字段,多字段均适用,并在百万级数据上测试,分页速度较好。
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
效率极高的通用分页存储过程,支持夺表关联。
通用存储过程(通用的分页存储过程) 在实际项目开发中,存储过程是非常常见的,因此掌握存储过程的用法是开发人员必备的实战法宝