在應用程式的開發中,如果資料庫中的數據量過於的龐大,則需要針對查詢數據做分頁處理,取出對應分頁中的數據,在Sqlserver分頁的語句寫法中,有兩種比較常用,一種是數據表中含有自增量Id的情況,可以根據Id的大小順序進行分頁,另一種是資料庫中不存在Int類型的Id的情況,此時就需要通過Row_Num ...
在應用程式的開發中,如果資料庫中的數據量過於的龐大,則需要針對查詢數據做分頁處理,取出對應分頁中的數據,在Sqlserver分頁的語句寫法中,有兩種比較常用,一種是數據表中含有自增量Id的情況,可以根據Id的大小順序進行分頁,另一種是資料庫中不存在Int類型的Id的情況,此時就需要通過Row_Number函數來實現分頁。
(1)數據表中存在自增量Id的情況
假設我們查詢的表名稱為Student,包含的欄位有:Id(Id號,自增變數)、Name(姓名)、BirthDay(出生日期)。按出生日期從早到晚排序,獲取排序後第31到60個學生的信息,語句可以使用Select Top的方式書寫。具體如下:
Select Top 30 * FROM Student Where Id Not In (Select Top 30 FROM Student Order By BirthDay) Order By BirthDay
如果是獲取第91到120排位的學生的話,則是下列語句。
Select Top 30 * FROM Student Where Id Not In (Select Top 90 FROM Student Order By BirthDay) Order By BirthDay
(2)數據表中不存在Id的情況
此種情況不可能再使用top來排序了,可使用row_Number進行排序後再篩選對應的值。
更改上述的Student表的結構為:StudentCode(文本類型,非數字)、Name(姓名)、BirthDay(出生日期)。按出生日期從早到晚排序,獲取排序後第31到60個學生的信息,此時的SQL語句為:
With tempTb AS
(
Select ROW_NUMBER() OVER(order by BirthDay ASC) AS RowNumber,* FROM Student
)
Select * FROM tempTb Where RowNumber>30 AND RowNumber<=60
在臨時表tempTb中使用了ROW_NUMBER() OVER來獲取排序後的序號,Over裡面為排序的規則。
備註:此文章轉載自博主個人技術站點,博主個人站致力於分享相關技術文章,同時也分享Windows伺服器和Linux伺服器運維等知識:IT技術小趣屋。
轉載請標明出處。