SQL 2000如何分頁

2021-06-09 07:04:12 字數 1975 閱讀 7421

網上搜的sql 2000如何分頁,程式中採用的是方案二的方法,如下:

應乙個朋友的要求,貼上收藏的sql常用分頁的辦法~~ 

表中主鍵必須為標識列,[id] int identity (1,1) 

1.分頁方案一:(利用not in和select top分頁) 

語句形式:  

select top 頁記錄數量 * 

from 表名 

where (id not in 

(select top (每頁行數*(頁數-1)) id 

from 表名 

order by id)) 

order by id 

//自己還可以加上一些查詢條件 

例: 

select top 2 * 

from sys_material_type 

where (mt_id not in 

(select top (2*(3-1)) mt_id from sys_material_type order by mt_id)) 

order by mt_id 

2.分頁方案二:(利用id大於多少和select top分頁) 

語句形式: 

select top 每頁記錄數量 * 

from 表名 

where (id > 

(select max(id) 

from (select top 每頁行數*頁數 id from 表 

order by id) as t) 

)  order by id 

例: 

select top 2 * 

from sys_material_type 

where (mt_id > 

(select max(mt_id) 

from (select top (2*(3-1)) mt_id 

from sys_material_type 

order by mt_id) as t)) 

order by mt_id 

3.分頁方案三:(利用sql的游標儲存過程分頁) 

create procedure sqlpager 

@sqlstr nvarchar(4000), --查詢字串 

@currentpage int, --第n頁 

@pagesize int --每頁行數 

as 

set nocount on 

declare @p1 int, --p1是游標的id 

@rowcount int 

exec sp_cursoropen @p1 output,@sqlstr,@scrollopt=1,@ccopt=1, @rowcount=@rowcount output 

select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 當前頁 

set @currentpage=(@currentpage-1)*@pagesize+1 

exec sp_cursorfetch @p1,16,@currentpage,@pagesize 

exec sp_cursorclose @p1 

set nocount off 

4.總結: 

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。 

建議優化的時候,加上主鍵和索引,查詢效率會提高。 

通過sql 查詢分析器,顯示比較:我的結論是: 

分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句 

分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句 

分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用

sql2000臨時表分頁

if exists select from dbo.sysobjects where id object id n temp and objectproperty id,n isusertable 1 drop table temp create table temp pager2011 id in...

sql2000下 分頁儲存過程

set quoted identifier off goset ansi nulls on go 名稱 分頁儲存過程 使用示例 exec sp pageindex from stusources 2,10 注意 目前還沒有對輸入的引數進行嚴格的驗證 預設為輸入都是合法有效的 alter proc s...

sql 2000 分頁儲存過程

setansi nulls onset quoted identifier ongo selectbase 1,1,select j.u.p name from job j left join users u on j.userid u.id t flag 0 alter procedure sel...