通用分頁存儲過程(原創)

           這是我項目中使用的一個分頁存儲過程,具有很強的通用性。配合前臺ASP.NET使用50萬條數據基本感不到延遲。數據庫為SQLServer2000。

          1.分頁存儲過程

          CREATE   procedure pagination

           @str_sql           varchar(1000) = '*',     -- 執行的SQL 不含Order by 內容  
           @str_orderfield    varchar(255)='''',       -- 排序的字段名 
           @page_size         int = 10,                     -- 頁大小 
           @page_index        int = 0,                      -- 頁碼
           @order_type        int,                           -- 設置排序類型, 非 -1 值則降序 
           @total_count       int   output                 -- 返回記錄總數, 非 0 值則返回 
          as

          ---------------------
          -- 獲取指定頁的數據--
          ---------------------

          declare @strsql   varchar(5000)              -- 主語句
          declare @strtmp   varchar(5000)             -- 臨時變量
          declare @strorder varchar(400)              -- 排序字串
          declare @cruRow   int                            -- 當前行號
           

          --執行總數統計
          exec getRowCount @str_sql,@total_count output

          set @strtmp =  ' select * from ' +
                  '      (select top ' + convert(varchar(10),@page_size) + ' * from ' +
                  '         (select top ' + convert(varchar(10),(@page_index + 1) * @page_size)  +' * from '+        -- N+1頁
                  '            ('+ @str_sql +') Src '

          --排序方向
          if @order_type !=0
           begin
           set @strsql= @strtmp +
                 '          order by @str_orderfield asc) a ' +
                 '       order by @str_orderfield desc)b' +
                        ' order by @str_orderfield asc'
           end
          else
           begin
           set @strsql= @strtmp +
                 '          order by @str_orderfield desc) a ' +
                 '       order by  @str_orderfieldasc)b' +
                        ' order by  @str_orderfield desc'
           end

          exec (@strsql)

          GO

          ----------------------------------------------------------------------------

          2.分頁存儲過程執行中用到的行數統計

          create  procedure getRowCount
                 @sql    nvarchar(2000),
                 @count  int output
          as
          begin

          --------------------
          -- 獲取數據總行數 --
          --------------------

            declare @tmpsql nvarchar(2000)
            set @tmpsql='select @count=count(*)  from ('+ @sql +') a'

            execute sp_executesql @tmpsql,N'@count int output',@count output
           
          end

          GO

          posted on 2008-01-10 17:08 靈! 閱讀(516) 評論(0)  編輯  收藏 所屬分類: Java專題-分頁技術


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          隨筆分類

          隨筆檔案

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙井市| 思南县| 克什克腾旗| 海阳市| 广东省| 开江县| 新津县| 营山县| 华宁县| 息烽县| 大埔县| 江西省| 尤溪县| 长子县| 霍城县| 泰安市| 姜堰市| 湟中县| 马山县| 西乌| 炉霍县| 芜湖市| 策勒县| 鞍山市| 合川市| 黔南| 盐城市| 岑溪市| 砚山县| 平谷区| 灌云县| 驻马店市| 华蓥市| 苍溪县| 剑河县| 万州区| 小金县| 遂昌县| 新安县| 兴化市| 乐都县|