SQL 分頁支援查詢

2021-09-22 07:35:50 字數 2299 閱讀 9211

分頁支援查詢 select * from (select *,row_number() over(order by [id]) as row_index from [table] ) as [newtable] where row_index between [startindex] and [endindex]

sql server 2000的自定義分頁,但是在sql server 2000中,要實現顯示某一頁,就返回那一頁資料的效果的方法實在不盡人意.網上很多通用的分頁儲存過程,但看著就頭大.如果使用我前面提到的使用in,not in,top來進行返回特定頁,特殊的限制又會比較多(比如id要遞增).現在sql server 2005中提供了乙個函式row_number(),可以使自定義分頁變得簡單許多.      我們先來看看row_number()是幹什麼的.執行下面這段sql語句:      select [reportid],[username], [reportid],      [timestart], [timeend],row_number() over (order by reportid) as rowno      from [executionlog]      執行結果如下圖所示:            很簡單,row_number() 就是生成乙個順序的行號,而他生成順序的標準,就是後面緊跟的over(order by reportid).現在,你看到了自定義分頁的影子了嗎?:)下面,我們看看怎麼具體應用這個rowno進行分頁.

現在,假設我每一頁的資料是10條,我們就可以使用如下所示的sql語句返回指定頁的資料:      @"        select top 10 *        from        (         select top 10 [instancename], [username], [reportid],         [timestart], [timeend],row_number() over (order by reportid) as rowno         from [executionlog]        ) as a        where rowno > " + pageindex*10      pageindex就是我們需要資料的頁數.很簡單,不是嗎?並且,這種方式幾乎沒有什麼限制,因為他相當於對於任何檢索,都生成了乙個新的排序列.我們就可以使用該列進行自定義分頁.

***************=

下面舉個例子:

row_number函式

sql server2005為我們引入了乙個row_number函式。你是否曾經需要為你的查詢結果集做行序號?你有時會發現能夠為行做序號是一件很有用的事情。從前,你不得不作棘手的事,像建立乙個有序號列的臨時表,然後把你的select結果插入到這個臨時表中。現在,用row_number函式,你就可以獲得新增在你的結果集的增加列中的行序號。為了獲得行序號,你只要簡單的將row_number函式作為一列新增進你的select語句中。你還必須新增over語句以便告訴sql server你希望怎樣新增行序號。

select row_number() over(order by employee_id) as 'row number', * from   dbo.employee

結果row number employee_id firstname lastname soc_sec 

1 5623222 tim jones 123-65-8745 

2 5632111 rob kinkad 456-69-8754 

3 6365666 jim miller 236-56-8989 

4 7563333 joe roberts 564-89-5555

這個查詢返回所有的雇員和乙個顯示每條記錄在哪一行的乙個序號。over語句使sql server基於employee_id列增加行序號。換句話說,產生了行序號,就好像資料按employee_id做了排序。這是很重要的一點,因為你仍然可以改變select的排序順序。以下面的查詢為例:

select row_number() over(order by employee_id) as 'row number', * from   dbo.employee   order by soc_sec

結果row number employee_id firstname lastname soc_sec 

1 5623222 tim jones 123-65-8745 

3 6365666 jim miller 236-56-8989 

2 5632111 rob kinkad 456-69-8754 

4 7563333 joe roberts 564-89-5555

注意第二個結果集資料是按社會安全編號來排序的,但是行號仍然建立得好像資料是按employee_id排序的。

SQL 分頁支援查詢

分頁支援查詢 select from select row number over order by id as row index from table as newtable where row index between startindex and endindex sql server 2...

SQL分頁查詢

分頁sql查詢在程式設計的應用很多,主要有儲存過程分頁和sql分頁兩種,我比較喜歡用sql分頁,主要是很方便。為了提高查詢效率,應在排序欄位上加索引。sql分頁查詢的原理很簡單,比如你要查100條資料中的30 40條,你先查詢出前40條,再把這30條倒序,再查出這倒序後的前十條,最後把這十條倒序就是...

sql分頁查詢

declare id int declare moverecords int declare currentpage int declare pagesize int set currentpage 300 set pagesize 100 currentpage和 pagesize是傳入引數 se...