久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL Server中怎么實現高效分頁

177次閱讀
沒有評論

共計 2164 個字符,預計需要花費 6 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關 SQL Server 中怎么實現高效分頁,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

ROW_NUMBER 的含義及語法定義

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

ROW_NUMBER () OVER ( [ PARTITION BY 字段 ,] order_by_clause )PARTITION BY: 將 FROM 子句生成的結果集劃分為應用 ROW_NUMBER 函數的分區。value_expression 指定對結果集進行分區所依據的列。如果未指定 PARTITION BY,則此函數將查詢結果集的所有行視為單個組。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

演示數據準備

為了說明方便,我們準備一些演示數據,這是一個簡單的業務銷售表,字段只有業務員、銷售區域和銷售額,如下:

declare @sale table( FName nvarchar(50), FDistrict nvarchar(50), FAmount decimal(28,10) ); insert into @sale values (張三 , 北京 ,20000), (張三 , 上海 ,50000), (張三 , 深圳 ,40000), (張三 , 廣州 ,30000), (李四 , 北京 ,30000), (李四 , 上海 ,50000), (李四 , 深圳 ,40000), (李四 , 廣州 ,10000), (王二 , 北京 ,70000), (王二 , 上海 ,10000), (王二 , 深圳 ,60000), (王二 , 廣州 ,20000), (馬六 , 北京 ,80000), (馬六 , 上海 ,20000), (馬六 , 深圳 ,70000), (馬六 , 廣州 ,60000)

準備演示數據

使用 ROW_NUMBER 分頁

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

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

分頁查詢

ROW_NUMBER 函數在 SQL 中屬于熱名稱 (即剛定的名稱 FRowIndex),只可以出現在 select 子句中,需要放在子查詢中。也可以先對子查詢做好定義后面再直接引用,語法如下:

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;

分頁查詢

ROW_NUMBER 來做分頁查詢,經過反復應用測試,效率還是很高的。完整的測試腳本參看下圖:

使用 OFFSET 實現分頁

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

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

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

上述就是丸趣 TV 小編為大家分享的 SQL Server 中怎么實現高效分頁了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計2164字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 陆川县| 武威市| 玉田县| 芮城县| 北碚区| 呈贡县| 芷江| 谢通门县| 千阳县| 崇州市| 正镶白旗| 富宁县| 龙游县| 财经| 徐州市| 芒康县| 宁国市| 富宁县| 镇原县| 潜江市| 石阡县| 屏东市| 宝应县| 郧西县| 筠连县| 昭觉县| 朔州市| 黄浦区| 祁门县| 余江县| 丽水市| 黎城县| 尉犁县| 得荣县| 东明县| 新乐市| 石嘴山市| 崇左市| 吴桥县| 博罗县| 洮南市|