<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歲月如哥
    人生非夢(mèng)
    posts - 50,comments - 144,trackbacks - 0

          基本的思路有如下幾種:

    1. 從12.5.3版本開(kāi)始sybase支持top關(guān)鍵字,試著使用,但是未果(同事說(shuō)sybase對(duì)top支持不好),因?yàn)椴恢С智短住J褂玫氖侨缦碌膕ql:  
      select top 10 t1.AH, t1.BH from K_ZS..B_MS t1 where t1.BH not in (select top 20 t2.BH from K_ZS..B_MS t2) 
      這里的是不帶order by的,另外一種是帶order by的,效率會(huì)比較高。
    2. 在存儲(chǔ)過(guò)程端使用set rowcount 來(lái)實(shí)現(xiàn)分頁(yè),沒(méi)有試驗(yàn)。
    3. 用存儲(chǔ)過(guò)程,建立臨時(shí)表,獲取數(shù)據(jù),然后動(dòng)態(tài)sql獲得臨時(shí)表數(shù)據(jù)。最后從網(wǎng)上找到的如下的兩個(gè)分頁(yè)存儲(chǔ)過(guò)程:
      -- 按行讀取

      CREATE PROCEDURE GetDataByLine
      (
              
      --創(chuàng)建一個(gè)分頁(yè)讀取過(guò)程
          @SqlStr         varchar(8000),    --SQL語(yǔ)句
          @FirstRec       int,        --頁(yè)起始行
          @LastRec        int        --頁(yè)結(jié)束行
      )
      AS
      DECLARE @dt varchar(10)    --生成臨時(shí)表的隨機(jī)數(shù)
      BEGIN

          
      SELECT @dt= substring(convert(varcharrand()), 310)    --一個(gè)字符型的隨機(jī)數(shù)
          
          
      --將搜索結(jié)果放入臨時(shí)表中,表名隨機(jī)生成,在' FROM '前插入'INTO '+隨機(jī)臨時(shí)表名
          SELECT @SqlStr = stuff(@SqlStrcharindex(' FROM 'upper(@SqlStr)), 6 ,' INTO tempdb..Lining' + @dt + ' FROM ')
          
      EXECUTE (@SqlStr)
          
          
      --為臨時(shí)表增加id號(hào)
          SELECT @SqlStr = 'ALTER TABLE tempdb..Lining' + @dt + ' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY'
          
      EXECUTE (@SqlStr)
          
          
      --計(jì)算臨時(shí)表中的記錄數(shù)
          --SELECT @SqlStr = 'SELECT Count(*) From tempdb..Lining' + @dt
          --EXECUTE (@SqlStr)
          
          
      --選取記錄號(hào)在起始行和結(jié)束行中間的記錄
          SELECT @SqlStr = 'SELECT * FROM tempdb..Lining'+@dt+' WHERE TEMPDB_ID > ' + convert(varchar@FirstRec+ ' and TEMPDB_ID <= ' + convert(varchar@LastRec)
          
      EXECUTE (@SqlStr)
          
          
      --刪除臨時(shí)表
          SELECT @SqlStr = 'DROP TABLE tempdb..Lining'+@dt
          
      EXECUTE (@SqlStr
        
      END

      /*
      some comments:
      1.@SqlStr     varchar(8000), depends on your page size
      2. this is a generic paging sp, if you just want to use it for specific table, 
         you'd better change the 'tempdb..Lining' to #Paging, the performance will be better
      */

      -- 按頁(yè)讀取

      CREATE PROCEDURE GetDataByPage
      (
          
      --創(chuàng)建一個(gè)分頁(yè)讀取過(guò)程
          @SqlStr         varchar(8000),    --SQL語(yǔ)句
          @PageSize       int,            --每頁(yè)記錄數(shù)
          @CurrentPage    int                --當(dāng)前頁(yè)數(shù)
      )
      AS
      DECLARE @FirstRec int@LastRec int@dt varchar(10)    --頁(yè)起始行,頁(yè)結(jié)束行,生成臨時(shí)表的隨機(jī)數(shù)
      BEGIN

          
      SELECT @FirstRec = (@CurrentPage - 1* @PageSize    --計(jì)算頁(yè)起始行
          SELECT @LastRec = (@CurrentPage * @PageSize + 1)    --計(jì)算頁(yè)結(jié)束行
          
          
      SELECT @dt= substring(convert(varchar,rand()),3,10)    --一個(gè)字符型的隨機(jī)數(shù)
          
          
      --將搜索結(jié)果放入臨時(shí)表中,表名隨機(jī)生成,在' FROM '前插入'INTO '+隨機(jī)臨時(shí)表名
          SELECT @SqlStr = stuff(@SqlStrcharindex(' FROM ',upper(@SqlStr)), 6 ,' INTO tempdb..Paging'+@dt+' FROM ')
          
      EXECUTE (@SqlStr)
          
          
      --為臨時(shí)表增加id號(hào)
          SELECT @SqlStr = 'ALTER TABLE tempdb..Paging'+@dt+' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY'
          
      EXECUTE (@SqlStr)
          
          
      --計(jì)算臨時(shí)表中的記錄數(shù)
          --SELECT @SqlStr = 'SELECT Count(*) From tempdb..Paging'+@dt
          --EXECUTE (@SqlStr)
          
          
      --選取記錄號(hào)在起始行和結(jié)束行中間的記錄
          SELECT @SqlStr = 'SELECT * FROM tempdb..Paging'+@dt+' WHERE TEMPDB_ID > '+convert(varchar,@FirstRec)+' and TEMPDB_ID < '+convert(varchar,@LastRec)
          
      EXECUTE (@SqlStr)
          
          
      --刪除臨時(shí)表
          SELECT @SqlStr = 'DROP TABLE tempdb..Paging'+@dt
          
      EXECUTE (@SqlStr
        
      END

      /*
      some comments:
      1. @SqlStr     varchar(8000), depends on your page size
      2. this is a generic paging sp, if you just want to use it for specific table, 
         you'd better change the 'tempdb..Paging' to #Paging, the performance will be better
      */


    -- 清空日志
    Dump Transaction DB_BD With truncate_only
    go

    use DB_BD
    go

    if existsselect 1 from sysobjects
                 
    where id = object_id'PR_GET_PAGESIZE' )
                   
    and sysstat & 15 = 4 )
      
    drop procedure PR_GET_PAGESIZE
    go

    create procedure PR_GET_PAGESIZE (
        
    @SqlStr         varchar(8000),    -- SQL語(yǔ)句
        @PageSize       int,                  -- 每頁(yè)記錄數(shù)
        @CurrentPage    int                      -- 當(dāng)前頁(yè)數(shù)
    )
    as
    begin
        
    declare @FirstRec int,     -- 頁(yè)起始行  
              @maxCount int,     -- 頁(yè)結(jié)束行
              @dt varchar(10)       -- 生成臨時(shí)表的隨機(jī)數(shù)
        select @FirstRec = (@CurrentPage - 1* @PageSize    -- 計(jì)算頁(yè)起始行
        
        
        
    -- 將搜索結(jié)果放入臨時(shí)表中,表名隨機(jī)生成,在' from '前插入'into '+隨機(jī)臨時(shí)表名
        select @SqlStr = stuff(@SqlStrcharindex(' from ',lower(@SqlStr)), 6,
          
    ', TEMPDB_ID = identity(11) into #temp_page from ')
        
        
    -- 設(shè)置結(jié)束行
        select @maxCount = @PageSize*@CurrentPage
        
    select @SqlStr = 'set rowcount ' + convert(varchar@maxCount
                        
    +  ' ' + @SqlStr 
                        
    + '  set rowcount 0 '
        
        
    -- 選取記錄號(hào)在起始行和結(jié)束行中間的記錄  
        select @SqlStr = @SqlStr + ' select * from #temp_page where TEMPDB_ID > ' + convert(varchar@FirstRec
        
    print '%1!'@SqlStr  
        
    execute (@SqlStr)
      
    end
    go

    sp_procxmode PR_GET_PAGESIZE, anymode
    go
    posted on 2008-10-14 16:36 歲月如歌 閱讀(2931) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): db

    FeedBack:
    # re: sybase數(shù)據(jù)庫(kù)端分頁(yè)[未登錄](méi)
    2011-12-15 11:53 | 小刀
    那兩個(gè)分頁(yè)存儲(chǔ)過(guò)程還不錯(cuò),就是效率不是很高,望斑竹繼續(xù)努力~~  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲AV无码乱码麻豆精品国产| 我要看WWW免费看插插视频| 国产精品视_精品国产免费| 久久久无码精品亚洲日韩按摩| 久久久精品视频免费观看 | 一区二区三区免费电影| 日韩在线免费播放| 噜噜综合亚洲AV中文无码| 国产成人无码区免费A∨视频网站| 亚洲精品无播放器在线播放 | 亚洲精品乱码久久久久久蜜桃图片| 青娱分类视频精品免费2| 亚洲乱码在线卡一卡二卡新区| 成人黄页网站免费观看大全| 久久亚洲精品无码av| 亚洲电影日韩精品| 中文字幕乱理片免费完整的| 中文字幕亚洲综合久久| 久久精品女人天堂AV免费观看 | 黄桃AV无码免费一区二区三区| 亚洲色大成网站WWW久久九九| 中文字幕无码一区二区免费| 久久久久亚洲AV无码网站| 久久精品国产免费观看三人同眠| 亚洲一区二区三区在线观看蜜桃| 永久免费毛片手机版在线看| 一级中文字幕免费乱码专区| 久久久久久亚洲精品| 成人毛片18女人毛片免费96 | 99在线精品免费视频九九视| 校园亚洲春色另类小说合集| 久久久久久a亚洲欧洲aⅴ| 综合在线免费视频| 久久亚洲精品无码网站| 亚洲AV无码久久精品色欲| 久久WWW免费人成人片| www成人免费观看网站| 亚洲成a人片在线观| 又粗又大又硬又爽的免费视频| 久久精品乱子伦免费| 国产亚洲欧美在线观看|