分頁從資料庫返回一張表的某些條數據 假設我需要查詢 系統表 sys.all_columns中的數據,每次查詢10條 第一次查詢第1-10條數據 第二次查詢第11-20條數據 第三次查詢第21-30條數據 ......以此類推 於是我想到了sqlserver的ROW_NUMBER()排序函數,可以根據 ...
分頁從資料庫返回一張表的某些條數據
假設我需要查詢 系統表 sys.all_columns中的數據,每次查詢10條
第一次查詢第1-10條數據
第二次查詢第11-20條數據
第三次查詢第21-30條數據
......以此類推
於是我想到了sqlserver的ROW_NUMBER()排序函數,可以根據排序的欄位返回行號
詳細請查看微軟官方文檔 https://docs.microsoft.com/zh-cn/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017
ROW_NUMBER()語法
ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
參數
PARTITION BY value_expression 將 FROM 子句生成的結果集劃分為應用 ROW_NUMBER 函數的分區。 value_expression 指定對結果集進行分區所依據的列。 如果未指定 PARTITION BY,則此函數將查詢結果集的所有行視為單個組。 有關詳細信息,請參閱 OVER 子句 (Transact-SQL)。 order_by_clause ORDER BY 子句可確定在特定分區中為行分配唯一 ROW_NUMBER 的順序。 它是必需的。 有關詳細信息,請參閱 OVER 子句 (Transact-SQL)。
返回類型
bigint
分頁示例:
查詢第一頁時
DECLARE @Page_index INT --頁數 DECLARE @Page_size INT --每頁條數 SET @Page_index=1 SET @Page_size=10 DECLARE @BNUN INT --開始條數 DECLARE @ENUM INT --結束條數 SET @BNUN=(@Page_index-1) * @Page_size SET @ENUM=@Page_index * @Page_size --排序取表中第幾條到第幾條數據 SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY name) AS RowNum, * FROM (SELECT * FROM master.sys.all_columns) AS T ) AS N WHERE RowNum > @BNUN And RowNum <= @ENUM --返回總條數 SELECT COUNT(1) FROM (SELECT * FROM master.sys.all_columns) AS t
查詢結果
查詢第n頁時
DECLARE @Page_index INT --頁數 DECLARE @Page_size INT --每頁條數 SET @Page_index=n SET @Page_size=10 DECLARE @BNUN INT --開始條數 DECLARE @ENUM INT --結束條數 SET @BNUN=(@Page_index-1) * @Page_size SET @ENUM=@Page_index * @Page_size --排序取表中第幾條到第幾條數據 SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY name) AS RowNum, * FROM (SELECT * FROM master.sys.all_columns) AS T ) AS N WHERE RowNum > @BNUN And RowNum <= @ENUM --返回總條數 SELECT COUNT(1) FROM (SELECT * FROM master.sys.all_columns) AS t