天天看點

[轉]三種SQL分頁法

 表中主鍵必須為辨別列 ,[ID] int IDENTITY (1,1)    1.分頁方案一:(利用Not In和SELECT TOP分頁)

[轉]三種SQL分頁法

語句形式:

[轉]三種SQL分頁法

SELECT   TOP   10  *

[轉]三種SQL分頁法

FROM TestTable

[轉]三種SQL分頁法

WHERE  (ID  NOT   IN

[轉]三種SQL分頁法

          ( SELECT   TOP  20 id

[轉]三種SQL分頁法

         FROM TestTable

[轉]三種SQL分頁法

          ORDER  BY id))

[轉]三種SQL分頁法

ORDER  BY ID

[轉]三種SQL分頁法
[轉]三種SQL分頁法
[轉]三種SQL分頁法

SELECT   TOP  頁大小 *

[轉]三種SQL分頁法

FROM TestTable

[轉]三種SQL分頁法

WHERE  (ID  NOT   IN

[轉]三種SQL分頁法

          ( SELECT   TOP  頁大小 *頁數 id

[轉]三種SQL分頁法

          FROM 表

[轉]三種SQL分頁法

          ORDER   BY id))

[轉]三種SQL分頁法

ORDER   BY ID     2.分頁方案二:(利用ID大于多少和SELECT TOP分頁)

[轉]三種SQL分頁法

語句形式:

   SELECT TOP 10 *

[轉]三種SQL分頁法

FROM TestTable

[轉]三種SQL分頁法

WHERE (ID >

[轉]三種SQL分頁法

          (SELECT MAX(id)

[轉]三種SQL分頁法

         FROM (SELECT TOP 20 id

[轉]三種SQL分頁法

                 FROM TestTable

[轉]三種SQL分頁法

                 ORDER BY id) AS T))

[轉]三種SQL分頁法

ORDER BY ID

[轉]三種SQL分頁法
[轉]三種SQL分頁法
[轉]三種SQL分頁法

SELECT TOP 頁大小 *

[轉]三種SQL分頁法

FROM TestTable

[轉]三種SQL分頁法

WHERE (ID >

[轉]三種SQL分頁法

          (SELECT MAX(id)

[轉]三種SQL分頁法

         FROM (SELECT TOP 頁大小*頁數 id

[轉]三種SQL分頁法

                 FROM 表

[轉]三種SQL分頁法

                 ORDER BY id) AS T))

[轉]三種SQL分頁法

ORDER BY ID

   3.分頁方案三:(利用SQL的遊标存儲過程分頁)

[轉]三種SQL分頁法

create  procedure SqlPager

[轉]三種SQL分頁法

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

[轉]三種SQL分頁法

@currentpage int, --第N頁

[轉]三種SQL分頁法

@pagesize int --每頁行數

[轉]三種SQL分頁法

as

[轉]三種SQL分頁法

set nocount on

[轉]三種SQL分頁法

declare @P1 int, --P1是遊标的id

[轉]三種SQL分頁法

 @rowcount int

[轉]三種SQL分頁法

exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@[email protected] output

[轉]三種SQL分頁法

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

[轉]三種SQL分頁法

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

[轉]三種SQL分頁法

exec sp_cursorfetch @P1,16,@currentpage,@pagesize 

[轉]三種SQL分頁法

exec sp_cursorclose @P1

[轉]三種SQL分頁法

set nocount off

[轉]三種SQL分頁法
[轉]三種SQL分頁法

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

[轉]三種SQL分頁法

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

[轉]三種SQL分頁法
[轉]三種SQL分頁法

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

[轉]三種SQL分頁法

分頁方案二:(利用ID大于多少和SELECT TOP分頁)效率最高,需要拼接SQL語句

[轉]三種SQL分頁法

分頁方案一:(利用Not In和SELECT TOP分頁)   效率次之,需要拼接SQL語句

[轉]三種SQL分頁法

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