通用高效分页存储过程代码

原创 2006年05月20日 20:34:00
通用高效分页存储过程代码

-- 获取指定页的数据
CREATE PROCEDURE pagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else
begin
if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
--如果@OrderType不是0,就执行降序,这句很重要!
end

else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder
else
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end

else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " 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) +" "+@strGetFields+ " from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder
end
end
exec (@strSQL)
GO

SQLServer千万数量级分页公共存储过程

转自:http://blog.csdn.net/tem168/article/details/6427123 SQLServer千万数量级分页公共存储过程   通用的数据库分页存...
  • chelen_jak
  • chelen_jak
  • 2014年12月11日 21:24
  • 3105

通用分页存储过程的使用

看着同事写的通用分页存储过程觉得还不错,分享给大家 1、存储过程 USE [test] GO /****** Object:  StoredProcedure [dbo]....
  • f10_s
  • f10_s
  • 2013年09月10日 16:35
  • 1344

sql通用存储过程

Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 ...
  • mycomputerxiaomei
  • mycomputerxiaomei
  • 2014年12月16日 15:49
  • 454

MySql 分页存储过程

DELIMITER $$ #修改分隔符为 $$ DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符 CREATE PROCEDURE sp_M...
  • xxj_jing
  • xxj_jing
  • 2014年06月05日 12:55
  • 6146

Oracle 高效分页存储过程实例 含javademo

关于分页,想必是每一程序猿都会遇到的问题,jiexialai
  • tmctle
  • tmctle
  • 2014年07月04日 23:34
  • 884

SQL Server2005及以上 存储过程分页方法分享

最近实习期间,项目开发过程中遇到了分页问题,问题如下:         在项目开发过程中,往往会遇到展示展示内容的问题。当内容数量不多的时候,我们直接用一条“SELECT * FROM ...”将去不...
  • dzyhenry
  • dzyhenry
  • 2014年03月29日 10:25
  • 2043

Oracle使用存储过程分页

今天我要说的就是基于Oracle存储过程的一种简单的分页方式,首先就是页面前端发起对分页的请求,然后向Oracle存储过程中传入页面当前数,页面大小,查询的SQL语句,而存储过程返回来的则是数据总条数...
  • lingyiwin
  • lingyiwin
  • 2016年04月26日 17:31
  • 1614

分页通用存储过程

/*通用分页存储过程1*/ USE HotelManagementSystem GO IF EXISTS(SELECT * FROM sys.objects WHERE NAME='cndoup...
  • zzzzzzzert
  • zzzzzzzert
  • 2014年04月10日 11:34
  • 290

通用分页存储过程

/****** Object: StoredProcedure [dbo].[up_PageSplit] Script Date: 03/18/2013 17:19:57 ******/ ...
  • flyzq0525
  • flyzq0525
  • 2013年04月09日 10:55
  • 305

什么时候用存储过程+分页例子

存储过程一般用于处理比较复杂的任务,基础ms这个平台,可以大大降低耗时,其编译机制也提高了数据库执行速度。 当然在系统控制方便方面,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更...
  • cc41798520101
  • cc41798520101
  • 2016年08月02日 16:00
  • 922
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通用高效分页存储过程代码
举报原因:
原因补充:

(最多只允许输入30个字)