当前位置: 首页 > 图文教程 > 数据库 > MSSQL > sqlserver 通用分页存储过程

MSSQL
金额阿拉伯数字转换为中文的自定义函数
关于SQL SERVER建立索引需要注意的问题
怎样获得SQL Server的优化性能?
收集SQL Server统计信息
不通过dsn访问sql server
简化SQL语句一例
数据库的数据挖掘概述(一)
数据库的数据挖掘概述(二)
谈数据库中模糊数据的输入与判别
ms sql删除重复的记录
SQL语句性能调整原则
通过HTTP访问SQL Server 2000数据库
使用SQL Server 将现有代码作为Web 服务提供
自定义用于ASP Web站点的SQL 7.0数据库(1)
自定义用于ASP Web站点的SQL 7.0数据库(2)
数据库查询结果的动态排序(1)
数据库查询结果的动态排序(2)
数据库查询结果的动态排序(3)
数据库查询结果的动态排序(4)
数据库查询结果的动态排序(5)

MSSQL 中的 sqlserver 通用分页存储过程


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 84 ::
收藏到网摘: n/a

sqlserver 通用分页存储过程,用存储过程可以提高效率与节约时间。
复制代码 代码如下:

create proc commonPagination
@columns varchar(500), --要显示的列名,用逗号隔开
@tableName varchar(100), --要查询的表名
@orderColumnName varchar(100), --排序的列名
@order varchar(50), --排序的方式,升序为asc,降序为 desc
@where varchar(100), --where 条件,如果不带查询条件,请用 1=1
@pageIndex int, --当前页索引
@pageSize int, --页大小(每页显示的记录条数)
@pageCount int output --总页数,输出参数
as
begin
declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句
declare @sqlSelect nvarchar(1000) --查询语句
set @sqlRecordCount=N'select @recordCount=count(*) from '
+@tableName + ' where '+ @where
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
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)
exec (@sqlSelect) --执行动态Sql
end
go
--以下是调用示例
use pubs
go
declare @pageCount int
exec commonPagination
'job_id,job_desc','jobs','job_id',
'asc','1=1',2,2,@pageCount output
select '总页数为:' + str(@pageCount)