国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sql server平臺用存儲過程進行分頁的兩種方法

2024-08-31 00:48:39
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • killergo的專欄

    最近因為稍微有點空閑時間,所以想了下在sql server平臺用存儲過程的分頁方式,現在列示在下面。

    實際測試時,在15000條數據情況下兩者性能大體相當,在20000-30000條數據的情況下前者明顯比后者性能更佳。更大數據量沒有進行測試了。

    注意,數據表里面是否有 鍵和索引 對性能的影響相當大
    -----------------------------------------------------
    第一種:

    /*第一個參數是每頁條數,第二個參數是目標頁碼*/

    create proc sp_fixpage @pagesize int,@destpage int  as
    set nocount on
    declare @id int
    declare @startid int

    select @startid = (@destpage - 1)*@pagesize

    set rowcount @startid
    select @id = id from t_member

    set rowcount @pagesize
    set nocount off
    select * from t_member where id > @id order by id
    go


    第二種:

    create procedure sp_fixpage1 @pagesize int ,@destpage int
    as
    set nocount on
     
    create table #mytable(
     [id] [int] not null ,
     [username] [varchar] (50) collate chinese_prc_ci_as not null ,
     [name] [varchar] (50) collate chinese_prc_ci_as null ,
     [origin] [int] null ,
     [latencybuydegree] [varchar] (50) collate chinese_prc_ci_as null ,
     [usertype] [varchar] (2) collate chinese_prc_ci_as null ,
     [email] [varchar] (50) collate chinese_prc_ci_as null ,
     [userlev] [int] null ,
     [regtime] [datetime] null ,
     [regmode] [bit] null ,
     [papernum] [varchar] (50) collate chinese_prc_ci_as null ,
     [userclass] [bit] null ,
     [password] [binary] (64) null ,
     [tel] [varchar] (50) collate chinese_prc_ci_as null ,
     [drass] [varchar] (150) collate chinese_prc_ci_as null ,
     [zip] [varchar] (50) collate chinese_prc_ci_as null ,
     [papernumlb] [int] null ,
     [opuser] [varchar] (50) collate chinese_prc_ci_as null ,
     [province] [varchar] (50) collate chinese_prc_ci_as null ,
     [birthdate] [datetime] null
    ) on [primary]

    declare @temppos int
    declare @abspos int
    declare @nowid int

    set @temppos = 1
    set @abspos = 1

    if @destpage > 1
        set @abspos = (@pagesize*(@destpage- 1) + 1)

       declare mycursor scroll cursor for
          select [id] from t_member order by id

    open mycursor
    fetch absolute @abspos from mycursor into @nowid

    while (@@fetch_status = 0) and (@temppos <= @pagesize)
    begin
      set @temppos = @temppos + 1
      insert into #mytable select * from t_member where [id] = @nowid
      fetch next from mycursor into @nowid
    end

    close mycursor
    deallocate mycursor

    set nocount off
     
    select * from #mytable
    drop table #mytable
    go

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 郁南县| 莒南县| 札达县| 错那县| 达日县| 金乡县| 遵义市| 福海县| 彭泽县| 黄山市| 呼和浩特市| 孝义市| 昆明市| 镇巴县| 长丰县| 万源市| 黔南| 兰溪市| 都匀市| 安泽县| 台山市| 聂拉木县| 松阳县| 大同市| 霍州市| 独山县| 临澧县| 三门县| 抚远县| 化隆| 和硕县| 那坡县| 嵊州市| 富顺县| 彭泽县| 西平县| 阳山县| 凤山县| 宜都市| 灌南县| 武威市|