当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 一个分页存储过程代码

MSSQL
大内存SQL Server数据库的加速剂
SQL Server视图管理中的四个限制条件
从客户端提升SQL Server数据库性能
影响SQL Server性能的三个关键点
MySQL鲜为人知的几个特殊技巧
最简单删除SQL Server中所有数据的方法
揭秘SQL Server 2008性能和可扩展性
SQL SQL Server 2008中的新日期数据类型
SQL Server 2005中的CLR集成
新手入门:防范SQL注入攻击的新办法
SQL Server 2005常见问题浅析
SQL Server数据库优化经验总结
SQL Server元数据的管理与应用
最新的关键SQL Server漏洞已被微软证实
如何使用SQLServer数据库查询累计值
SQL Server 2008中的新日期数据类型
SQL注入攻击成为新威胁将挑战操作系统安全
并行查询让SQL Server加速运行
SQL Server 2008数据挖掘查询任务
三招解决SQL Server数据库权限冲突

MSSQL 中的 一个分页存储过程代码


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

页存储过程(对有主键的表效率极高)

复制代码 代码如下:

------------------------------------
--用途:分页存储过程(对有主键的表效率极高)
--说明:
------------------------------------
ALTER PROCEDURE [UP_GetRecordByPage]
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 主键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsReCount bit = 0, -- 返回记录总数, 非0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非0 值则降序
@strWhere varchar(1000) = '' -- 查询条件(注意: 不要加where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp =''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
if @IsReCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere
exec (@strSQL)