Sql分頁

方法1: 適用於 SQL Server 2000/2005

1 SELECT TOP 頁大小 *
2 FROM table1
3 WHERE id NOT IN
4           (
5           SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER BY id
6           )
7 ORDER BY id

 

 

方法2:
適用於 SQL Server 2000/2005

 1 --順序寫法:
 2 SELECT TOP 頁大小 *
 3 FROM table1
 4 WHERE id >=
 5 (
 6 SELECT ISNULL(MAX(id),0) 
 7 FROM 
 8 (
 9 SELECT TOP 頁大小*(頁數-1)+1 id FROM table1 ORDER BY id
10 ) A
11 )
12 ORDER BY id
13 
14 --降序寫法:
15 SELECT TOP 頁大小 *
16 FROM table1
17 WHERE id <=
18 (
19 SELECT ISNULL(MIN(id),0) 
20 FROM 
21 (
22 SELECT TOP 頁大小*(頁數-1)+1 id FROM table1 ORDER BY id Desc
23 ) A
24 )
25 ORDER BY id Desc

 

方法3:
適用於 SQL Server 2005

1 SELECT TOP 頁大小 * 
2 FROM 
3         (
4         SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
5         ) A
6 WHERE RowNumber > 頁大小*(頁數-1)

 

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

 

 

 

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
建議優化的時候,加上主鍵和索引,查詢效率會提高。

通過SQL 查詢分析器,顯示比較:我的結論是:
分頁方案二:(利用ID大於多少和SELECT TOP分頁)效率最高,需要拼接SQL語句
分頁方案一:(利用Not In和SELECT TOP分頁)   效率次之,需要拼接SQL語句
分頁方案三:(利用SQL的遊標存儲過程分頁)    效率最差,但是最爲通用


發佈了65 篇原創文章 · 獲贊 15 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章