SQL 一句sql 分頁

2021-06-06 10:57:26 字數 1302 閱讀 4940

有關分頁 sql 的資料很多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資、效率低;使用儲存過程是個不錯的選擇,因為儲存過程是經過預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。

方法1:

適用於 sql server 2000/2005

select

top頁大小 

*from

table1

where

id notin(

select

top頁大小

*(頁數-1

) id 

from

table1 

order

byid

)order

byid

方法2:

適用於 sql server 2000/2005

select

top頁大小 

*from

table1

where

id >

(select

isnull

(max

(id),0) 

from

(select

top頁大小

*(頁數-1

) id 

from

table1 

order

byid) a

)order

byid

方法3:

適用於 sql server 2005

select

top頁大小 

*from

(select

row_number() 

over

(order

byid) 

asrownumber,

*from

table1

) awhere

rownumber 

>

頁大小*

(頁數-1)

說明,頁大小:每頁的行數;頁數:第幾頁。使用時,請把「頁大小」和「頁大小*(頁數-1)」替換成數字。

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

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

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

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

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

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

一句SQL搞定分頁

xpsql 使用者名稱 like 王 sql string.format select from select row number over order by as keelid,from as keeltemp where keeltemp.keelid and keeltemp.keelid ...

一句sql 分組統計數量

size x large select count tsuser.fid case when tsuser.fstoreid is not null then select s.fname from tustore s where s.fid tsuser.fstoreid end a,使用者的門店...

一句SQL完成動態分級查詢

在最近的 活字格專案中使用 activereports 報表設計器設計乙個報表模板時,遇到乙個多級分類的難題 需要將某個部門所有銷售及下屬部門的銷售金額彙總,因為下屬級別的層次不確定,所以靠拼接子查詢的方式顯然是不能滿足要求,經過一番實驗,利用了cte common table expression...