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

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

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

    歲月如哥
    人生非夢
    posts - 50,comments - 144,trackbacks - 0

          基本的思路有如下幾種:

    1. 從12.5.3版本開始sybase支持top關鍵字,試著使用,但是未果(同事說sybase對top支持不好),因為不支持嵌套。使用的是如下的sql:  
      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的,效率會比較高。
    2. 在存儲過程端使用set rowcount 來實現分頁,沒有試驗。
    3. 用存儲過程,建立臨時表,獲取數據,然后動態sql獲得臨時表數據。最后從網上找到的如下的兩個分頁存儲過程:
      -- 按行讀取

      CREATE PROCEDURE GetDataByLine
      (
              
      --創建一個分頁讀取過程
          @SqlStr         varchar(8000),    --SQL語句
          @FirstRec       int,        --頁起始行
          @LastRec        int        --頁結束行
      )
      AS
      DECLARE @dt varchar(10)    --生成臨時表的隨機數
      BEGIN

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

      -- 按頁讀取

      CREATE PROCEDURE GetDataByPage
      (
          
      --創建一個分頁讀取過程
          @SqlStr         varchar(8000),    --SQL語句
          @PageSize       int,            --每頁記錄數
          @CurrentPage    int                --當前頁數
      )
      AS
      DECLARE @FirstRec int@LastRec int@dt varchar(10)    --頁起始行,頁結束行,生成臨時表的隨機數
      BEGIN

          
      SELECT @FirstRec = (@CurrentPage - 1* @PageSize    --計算頁起始行
          SELECT @LastRec = (@CurrentPage * @PageSize + 1)    --計算頁結束行
          
          
      SELECT @dt= substring(convert(varchar,rand()),3,10)    --一個字符型的隨機數
          
          
      --將搜索結果放入臨時表中,表名隨機生成,在' FROM '前插入'INTO '+隨機臨時表名
          SELECT @SqlStr = stuff(@SqlStrcharindex(' FROM ',upper(@SqlStr)), 6 ,' INTO tempdb..Paging'+@dt+' FROM ')
          
      EXECUTE (@SqlStr)
          
          
      --為臨時表增加id號
          SELECT @SqlStr = 'ALTER TABLE tempdb..Paging'+@dt+' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY'
          
      EXECUTE (@SqlStr)
          
          
      --計算臨時表中的記錄數
          --SELECT @SqlStr = 'SELECT Count(*) From tempdb..Paging'+@dt
          --EXECUTE (@SqlStr)
          
          
      --選取記錄號在起始行和結束行中間的記錄
          SELECT @SqlStr = 'SELECT * FROM tempdb..Paging'+@dt+' WHERE TEMPDB_ID > '+convert(varchar,@FirstRec)+' and TEMPDB_ID < '+convert(varchar,@LastRec)
          
      EXECUTE (@SqlStr)
          
          
      --刪除臨時表
          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語句
        @PageSize       int,                  -- 每頁記錄數
        @CurrentPage    int                      -- 當前頁數
    )
    as
    begin
        
    declare @FirstRec int,     -- 頁起始行  
              @maxCount int,     -- 頁結束行
              @dt varchar(10)       -- 生成臨時表的隨機數
        select @FirstRec = (@CurrentPage - 1* @PageSize    -- 計算頁起始行
        
        
        
    -- 將搜索結果放入臨時表中,表名隨機生成,在' from '前插入'into '+隨機臨時表名
        select @SqlStr = stuff(@SqlStrcharindex(' from ',lower(@SqlStr)), 6,
          
    ', TEMPDB_ID = identity(11) into #temp_page from ')
        
        
    -- 設置結束行
        select @maxCount = @PageSize*@CurrentPage
        
    select @SqlStr = 'set rowcount ' + convert(varchar@maxCount
                        
    +  ' ' + @SqlStr 
                        
    + '  set rowcount 0 '
        
        
    -- 選取記錄號在起始行和結束行中間的記錄  
        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 歲月如歌 閱讀(2943) 評論(1)  編輯  收藏 所屬分類: db

    FeedBack:
    # re: sybase數據庫端分頁[未登錄]
    2011-12-15 11:53 | 小刀
    那兩個分頁存儲過程還不錯,就是效率不是很高,望斑竹繼續努力~~  回復  更多評論
      
    主站蜘蛛池模板: 亚洲真人无码永久在线观看| 亚洲欧洲精品成人久久曰| 亚洲av福利无码无一区二区| 亚洲美女激情视频| 免费无码AV一区二区| 亚洲视频在线免费播放| 特级淫片国产免费高清视频| 亚洲精品国产精品乱码不卡√| 亚洲愉拍一区二区三区| 妞干网在线免费观看| 久久久久亚洲AV无码麻豆| 无人视频免费观看免费视频| 免费一级毛片免费播放| 亚洲精品国产精品国自产网站| 中文字幕看片在线a免费| 日韩精品视频免费观看| 亚洲视频免费一区| 黄瓜视频影院在线观看免费| 亚洲五月激情综合图片区| 成人特级毛片69免费观看| 成年男女免费视频网站| 亚洲的天堂av无码| 久久国产乱子伦精品免费看| 免费大片在线观看网站| 成人毛片100免费观看| 久久精品国产亚洲精品2020| 国产香蕉九九久久精品免费| 亚洲在成人网在线看| 999任你躁在线精品免费不卡| 亚洲色无码一区二区三区| 牛牛在线精品观看免费正| 国产精品亚洲片在线观看不卡 | 亚洲看片无码在线视频| 免费国产黄网站在线观看可以下载 | 日韩在线看片免费人成视频播放 | 日本免费在线中文字幕| 亚洲乱码一二三四五六区| 亚洲国产精品免费在线观看| 亚洲av日韩av欧v在线天堂| 亚洲性色精品一区二区在线| 伊在人亚洲香蕉精品区麻豆|