zoukankan      html  css  js  c++  java
  • SQL大量数据查询分页存储过程

    /*     
       经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒,测试语法如下:     
       exec GetRecordFromPage news,newsid,10,100000     
       news 为 表名, newsid 为关键字段, 使用时请先对 newsid 建立索引。     
    */     
    /*     
       函数名称: GetRecordFromPage     
       函数功能: 获取指定页的数据     
       参数说明: @tblName       包含数据的表名     
                @fldName       关键字段名     
                @PageSize      每页记录数     
                @PageIndex     要获取的页码     
                @OrderType     排序类型, 0 - 升序, 1 - 降序     
                @strWhere      查询条件 (注意: 不要加 where)     
       作  者: 紫色形人     
       邮  箱: kissyougoodby@163.com     
       创建时间: 2007-9-27     
    修改时间: 2007-9-27*/     
    CREATE PROCEDURE GetRecordFromPage     
         @tblName       varchar(255),        -- 表名     
         @fldName       varchar(255),        -- 字段名     
         @PageSize      int = 10,            -- 页尺寸     
         @PageIndex     int = 1,             -- 页码     
         @OrderType     bit = 0,             -- 设置排序类型, 非 0 值则降序     
         @strWhere      varchar(2000) = ''   -- 查询条件 (注意: 不要加 where)     
    AS     
    declare @strSQL    varchar(6000)        -- 主语句     
    declare @strTmp    varchar(1000)        -- 临时变量     
       
    declare @strOrder varchar(500)         -- 排序类型     
    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     
    exec (@strSQL)
    GO
    
     
    转自:http://hi.baidu.com/ecentury/blog/item/4af0454a51ece42908f7ef41.html
  • 相关阅读:
    定时任务cron表达式解析
    dubbo admin的搭建(windows环境)
    搭建一个基于springboot的dubbo demo
    mysql考试成绩排名-关于@rowtotal、@rownum
    理解JMM及volatile关键字
    UnityLearn_Beginner_UnityTips
    UnityLearn_Beginner_UnityBasics
    Unity3D&Photon制作吃鸡游戏(未完)
    UNITY_UGUI
    UNITY_资源路径与加载外部文件
  • 原文地址:https://www.cnblogs.com/subingster/p/2103607.html
Copyright © 2011-2022 走看看