自己改写的一个sql server 2000的分页存储过程

阿木木的小爱情

阿木木的小爱情

2016-01-29 15:47

自己改写的一个sql server 2000的分页存储过程,自己改写的一个sql server 2000的分页存储过程
优点如下,简单,直接sql语句输入,高效,效率很高测试过了,不过最好是主键排序,还有少用视图 。

缺点也有,不支持复杂的sql语句,不能多字段排序,sql语句必须小于4000字符

/*
  经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:
  exec GetRecordFromPage news,newsid,10,100000
  news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。
*/

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

/*
  函数名称: GetRecordFromPage
  函数功能: 获取指定页的数据
  参数说明: @tblName      包含数据的表名
           @fldName      关键字段名
           @PageSize     每页记录数
           @PageIndex    要获取的页码
           @OrderType    排序类型, 0 - 升序, 1 - 降序
           @strWhere     查询条件 (注意: 不要加 where)
  作  者: 铁拳
  邮  箱: sunjianhua_kki@sina.com
  创建时间: 2004-07-04
  修改时间: 2004-07-04
  http://blog.knowsky.com/
*/
CREATE   PROCEDURE GetRecordFromPage1
    @SQL     varchar(8000),      -- SQL语句
    @PageSize     int = 10,           -- 页尺寸
    @PageIndex    int = 1,            -- 页码
    --@strOut       varchar(6000) output 输出处理完成的SQL语句
    @RecordCount  int = 0 output      -- 输出总记录数
AS

declare @strSQL   varchar(8000)       -- 最后获取的SQL语句
declare @strTmp   varchar(8000)       -- 临时变量
declare @strOrder varchar(500)        -- 排序类型
declare @tblName  varchar(255)        -- 表名
declare @fldName  varchar(255)        -- 字段名
declare @strWhere varchar(8000)       -- 查询条件 (注意: 不要加 where)
declare @tmpOrder varchar(255)        -- 排序字符串临时变量
declare @strFilds varchar(8000)       -- 需要显示的列
declare @intFilds int              -- 显示的列所在位置
declare @intOrder int                 -- 排序字符串位置
declare @intSQL   int              -- SQL语句长度
declare @intWhere int                 -- where字符串位置
declare @intTable int              -- 表名称位置
declare @strRsSql nvarchar(4000)      -- 统计总记录数sql语句

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

set @intOrder=CharIndex('order by',@SQL)
set @intSQL=Len(@SQL)

set @intFilds=CharIndex('select',@SQL)
set @strFilds=SubString(@SQL,@intFilds+7,@intSQL-@intFilds-1)
set @strFilds=SubString(@strFilds,1,CharIndex('from',@strFilds)-1)

set @tblName=SubString(@SQL,CharIndex('from',@SQL)+5,@intSQL-CharIndex('from',@SQL)+5)
set @intTable=CharIndex(' ',@tblName)
if @intTable0
begin
    set @tblName=SubString(@tblName,1,@intTabl

展开更多 50%)
分享

猜你喜欢

自己改写的一个sql server 2000的分页存储过程

SQLServer
自己改写的一个sql server 2000的分页存储过程

两个sql server 2000的通用分页存储过程

SQLServer
两个sql server 2000的通用分页存储过程

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server 存储过程的分页

ASP
SQL Server 存储过程的分页

SQL server 2000存储过程

SQLServer
SQL server 2000存储过程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一个分页存储过程

ASP
一个分页存储过程

SQL Server 存储过程的分页方案比拼

SQLServer
SQL Server 存储过程的分页方案比拼

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SQL Server中处理空值时涉及的三问题

SQL Server中处理空值时涉及的三问题

农夫果园PS合成教程

农夫果园PS合成教程
下拉加载更多内容 ↓