【澳门金沙vip】数据库存储过程分页显示

注:需要建立索引复制代码 代码如下:/*
经测试,在14483461条记录中查询第100000页,每页10条记录按升序和降序第一次时间均为0.47秒,第二次时间均为0.43秒,测试语法如下:
execGetRecordFromPagenews,newsid,10,100000
news为表名,newsid为关键字段,使用时请先对newsid建立索引。 */ /*
函数名称:GetRecordFromPage 函数功能:获取指定页的数据
参数说明:@tblName包含数据的表名 @fldName关键字段名 @PageSize每页记录数
@PageIndex要获取的页码 @OrderType排序类型,0-升序,1-降序
@strWhere查询条件(注意:不要加where) 作 者:铁拳 邮
箱:unjianhua_kki@sina.com”sunjianhua_kki@sina.com 创建时间:2004-07-04
修改时间:2004-07-04 */ CreatePROCEDUREGetRecordFromPage
@tblNamevarchar(255),–表名 @fldNamevarchar(255),–字段名
@PageSizeint=10,–页尺寸 @PageIndexint=1,–页码
@OrderTypebit=0,–设置排序类型,非0值则降序
@strWherevarchar(2000)=”–查询条件(注意:不要加where) AS
declare@strSQLvarchar(6000)–主语句
declare@strTmpvarchar(1000)–临时变量
declare@strOrdervarchar(500)–排序类型 if@OrderType!=0 begin
set@strTmp=”(selectmin” set@strOrder=”orderby[“+@fldName+”]desc” end
else begin set@strTmp=”(selectmax”
set@strOrder=”orderby[“+@fldName+”]asc” end
set@strSQL=”selecttop”+str(@PageSize)+”*from[”
+@tblName+”]where[“+@fldName+”]”+@strTmp+”([”
+@fldName+”])from(selecttop”+str((@PageIndex-1)*@PageSize)+”[”
+@fldName+”]from[“+@tblName+”]”+@strOrder+”)astblTmp)” +@strOrder
if@strWhere!=” set@strSQL=”selecttop”+str(@PageSize)+”*from[”
+@tblName+”]where[“+@fldName+”]”+@strTmp+”([”
+@fldName+”])from(selecttop”+str((@PageIndex-1)*@PageSize)+”[”
+@fldName+”]from[“+@tblName+”]where”+@strWhere+””
+@strOrder+”)astblTmp)and”+@strWhere+””+@strOrder if@PageIndex=1 begin
set@strTmp=”” if@strWhere!=” set@strTmp=”where(“+@strWhere+”)”
set@strSQL=”selecttop”+str(@PageSize)+”*from[”
+@tblName+”]”+@strTmp+””+@strOrder end exec(@strSQL) GO

微软在这方面打个胜仗,还有很长的路要走--个人认为,和硬件公司合作研发相配套硬件是不二法门。

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 [澳门金沙vip,” + @tblName + “] where ” + @strWhere + ” ” + @strOrder
else
set @strSQL = “select top ” + str(@PageSize) +” “+@strGetFields+ ”
from [“+ @tblName + “] “+ @strOrder
–如果是第一页就执行以上代码,这样会加快执行速度
end

原帖子如下:

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

小弟最近忙于一个公积金项目,对于部门数据库、中央数据库的调度进行了一些评估,Oracle软件+SUN/HP的硬件仍然占了中国政府机构服务器的大部分市场,再就是IBM,占据了高端和甚高端的大部分业务。

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的情况

澳门金沙vip 1修改一点点便于其他人使用 
澳门金沙vip 2CREATE PROCEDURE GetRecordFromPage 
澳门金沙vip 3@tblName varchar(255), — 表名 
澳门金沙vip 4@fldName varchar(255), — 字段名 
澳门金沙vip 5@OrderfldName varchar(255), — 排序字段名 
澳门金沙vip 6@StatfldName varchar(255), — 统计字段名 
澳门金沙vip 7@PageSize int = 10, — 页尺寸 
澳门金沙vip 8@PageIndex int = 1, — 页码 
澳门金沙vip 9@IsCount bit = 0, — 返回记录总数, 非 0 值则返回 
澳门金沙vip 10@OrderType bit = 0, — 设置排序类型, 非 0 值则降序 
澳门金沙vip 11@strWhere varchar(1000) = ” — 查询条件 (注意: 不要加 where) 
澳门金沙vip 12AS 
澳门金沙vip 13
澳门金沙vip 14declare @strSQL varchar(6000) — 主语句 
澳门金沙vip 15declare @strTmp varchar(100) — 临时变量 
澳门金沙vip 16declare @strOrder varchar(400) — 排序类型 
澳门金沙vip 17
澳门金沙vip 18if @OrderType != 0 
澳门金沙vip 19begin 
澳门金沙vip 20set @strTmp = “<(select min” 
澳门金沙vip 21set @strOrder = ” order by [” + @OrderfldName +”] desc” 
澳门金沙vip 22end 
澳门金沙vip 23else 
澳门金沙vip 24begin 
澳门金沙vip 25set @strTmp = “>(select max” 
澳门金沙vip 26set @strOrder = ” order by [” + @OrderfldName +”] asc” 
澳门金沙vip 27end 
澳门金沙vip 28
澳门金沙vip 29set @strSQL = “select top ” + str(@PageSize) + ” ” + @fldName + ” from [” 
澳门金沙vip 30+ @tblName + “] where [” + @OrderfldName + “]” + @strTmp + “([” 
澳门金沙vip 31+ @OrderfldName + “]) from (select top ” + str((@PageIndex-1)*@PageSize) + ” [” 
澳门金沙vip 32+ @OrderfldName + “] from [” + @tblName + “]” + @strOrder + “) as tblTmp)” 
澳门金沙vip 33+ @strOrder 
澳门金沙vip 34
澳门金沙vip 35if @strWhere != ” 
澳门金沙vip 36set @strSQL = “select top ” + str(@PageSize) + ” ” + @fldName + ” from [” 
澳门金沙vip 37+ @tblName + “] where [” + @OrderfldName + “]” + @strTmp + “([” 
澳门金沙vip 38+ @OrderfldName + “]) from (select top ” + str((@PageIndex-1)*@PageSize) + ” [” 
澳门金沙vip 39+ @OrderfldName + “] from [” + @tblName + “] where ” + @strWhere + ” ” 
澳门金沙vip 40+ @strOrder + “) as tblTmp) and ” + @strWhere + ” ” + @strOrder 
澳门金沙vip 41
澳门金沙vip 42if @PageIndex = 1 
澳门金沙vip 43begin 
澳门金沙vip 44set @strTmp = “” 
澳门金沙vip 45if @strWhere != ” 
澳门金沙vip 46set @strTmp = ” where ” + @strWhere 
澳门金沙vip 47
澳门金沙vip 48set @strSQL = “select top ” + str(@PageSize) + ” ” + @fldName + ” from [” 
澳门金沙vip 49+ @tblName + “]” + @strTmp + ” ” + @strOrder 
澳门金沙vip 50end 
澳门金沙vip 51
澳门金沙vip 52if @IsCount != 0 
澳门金沙vip 53set @strSQL = “select count(” + @StatfldName + “) as Total from [” + @tblName + “]” 
澳门金沙vip 54
澳门金沙vip 55exec (@strSQL) 
澳门金沙vip 56
澳门金沙vip 57GO 
澳门金沙vip 58

  • @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