欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何將數據庫中查詢出來的數據再進行分頁操作?

錢良釵2年前46瀏覽0評論

我之前寫過《如何在SQLServer查詢中實現高效分頁》專門講述分頁的,現摘錄部分,希望可以解決問題。


從MSSQL2005開始,SQL Server提供了一個內置函數ROW_NUMBER,這是一個非常神奇的函數。從MSSQL2012開始,SQL Server提供了offset方法進行分頁。

今天我們就談談ROW_NUMBER和offset的語法和在分頁中的應用。

ROW_NUMBER的含義及語法定義

ROW_NUMBER實現對結果集的輸出進行編號。 具體來說,返回結果集分區內行的序列號,每個分區的第一行從 1 開始。

ROW_NUMBER ( ) OVER ( order_by_clause )
  • order_by_clause: 子句可確定在特定分區中為行分配唯一 ROW_NUMBER 的順序。 order by 子句是必選項。
  • 返回值:bigint。結果集分區內行的序列號。

offset的含義及語法定義

offset是order by的子句,主要用來限定返回的行數,用來做分頁也是很合適的。只是從MSSQL2012才開始支持。語法結構如下:

FETCH { NEXT } { integer_constant | fetch_row_count_expression } { ROWS } ONLY

fetch_row_count_expression 可以是變量、參數或常量標量子查詢。 在使用子查詢時,它無法引用在外部查詢范圍中定義的任何列。也就是說,它無法與外部查詢相關聯。

結合到分頁,語法語法:

offset startPage rows fetch next pageSize rows only

其中起始頁面:startPage=(@page-1)*@rows,頁面大小:pageSize=@rows

演示數據準備

演示數據準備的代碼我就不粘貼了,直接看下圖:

使用ROW_NUMBER分頁

比如我們希望按照業務員+銷售區域排序后,每4條記錄一頁顯示,語法如下:

declare @pagesize int =4;--每頁記錄數
declare @pagenum int =1;--第幾頁
with saledata as
(
select row_number() over(order by FName,FDistrict) as FRowIndex,* from @sale
)
select * from saledata
where FRowIndex between @pagesize*(@pagenum-1)+1
and @pagenum*@pagesize;

使用OFFSET實現分頁

重復的代碼部分不再贅述,在查詢時要注意,offset是Order By的子句,不能獨立存在。語法結構如下:

select * from @sale
order by FName,FDistrict
offset (@pagenum-1)*@pagesize rows fetch next @pagesize rows only

返回的結果與使用row_number是一致的。完整的測試腳本參看下圖:

希望能解決題主所提的問題!