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

MSSQL
SQL Server导入导出数据三种方式比较
SQL Server_8525引擎错误怎么办?
Sql Server的复制功能快速学习
汇总SQL Server 2000安装常见问题
存储过程实例:SQL Server Sa密码破解
SQL Server危险扩展删除与恢复详解
SQL Server注入的四种个人经验和技巧方法
SQL Server对上亿表的排序和join的问题解决
使用SQL Server中COALESCE()函数的方法
SQL Server 2005混合模式登录配置
解决SQL Server不允许进行远程连接
SQL Server 2005的output子句用法
Oracle和SQL Server分析挖掘函数
mysql INSERT command denied to user
未与信任 SQL Server 连接相关
SQL Server存储的层级数据读出成树显示
SQL Server存储层级数据实现无限级分类
MySQL server has gone away问题原因
sqlserver与oracle的区别
mysql与sqlserver的所有区别

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 121 ::
收藏到网摘: 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)