SqlServer-儲存過程分頁
學習資料參考:https://blog.csdn.net/bodilove/article/details/73991783
https://www.cnblogs.com/JustYong/p/6078353.html
第一種
CREATE PROCEDURE [dbo].[OrderInfo_PAGE]
@TableName VARCHAR(50), --表名
@ReFieldsStr VARCHAR(200) = '*', --欄位名(全部欄位為*)
@OrderString VARCHAR(200), --排序欄位(必須!支援多欄位不用加order by)
@WhereString VARCHAR(500) =N'', --條件語句(不用加where)
@PageSize INT, --每頁多少條記錄
@PageIndex INT = 1 , --指定當前為第幾頁
@TotalRecord INT OUTPUT --返回總記錄數
AS
BEGIN
--處理開始點和結束點
DECLARE @StartRecord INT;
DECLARE @EndRecord INT;
DECLARE @TotalCountSql NVARCHAR(500);
DECLARE @SqlString NVARCHAR(2000);
SET @StartRecord = (@PageIndex-1)*@PageSize + 1--起始記錄
SET @EndRecord = @StartRecord + @PageSize - 1 --結尾記錄
SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--總記錄數語句
SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;--查詢語句
--
IF (@WhereString! = '' or @WhereString!=null)
BEGIN
SET @TotalCountSql=@TotalCountSql + ' where '+ @WhereString;
SET @SqlString =@SqlString+ ' where '+ @WhereString;
END
--第一次執行得到
EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord OUTPUT;--返回總記錄數
----執行主語句
SET @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' + ltrim(str(@EndRecord));
Exec(@SqlString)
END
declare @totalCount int
exec OrderInfo_PAGE 'OrderProduct','*','OrderGuid','',3,1,@totalCount output;
select @totalCount as totalCount;--總記錄數。
declare @totalCount int
exec OrderInfo_PAGE 'OrderProduct','*','OrderGuid','',3,1,@totalCount output;
exec OrderInfo_PAGE 'OrderProduct','*','OrderGuid','',3,2,@totalCount output;
select @totalCount as totalCount;--總記錄數。
第二種-使用臨時表
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME='TempPage')
DROP PROC TempPage
GO
CREATE PROCEDURE TempPage
@PageSize INT, --每頁大小
@PapeIndex INT, --當前索引
@PageCount INT OUTPUT, --返回總頁數
@RecordCount INT OUTPUT --返回總記錄條數
AS
BEGIN
--先建立臨時表存放表連線查詢資料
SELECT * INTO #NewsTemp FROM
(
SELECT
OP.OrderGuid,
OP.ProductGuid,
OP.ProductName,
O.LoginId ,
ROW_NUMBER() OVER(ORDER BY OP.OrderGuid DESC) AS RowNumber
FROM OrderProduct AS OP
INNER JOIN OrderInfo AS O ON O.OrderGuid=OP.OrderGuid
) T
--從臨時表中查詢分頁資料
SELECT * FROM #NewsTemp WHERE RowNumber BETWEEN @PageSize*(@PapeIndex-1)+1 AND (@PageSize*@PapeIndex)
--查詢總記錄條數
SELECT @RecordCount=COUNT(1) FROM #NewsTemp
--計算總頁數
SET @PAGECOUNT = CEILING(@RecordCount*1.0/@PageSize)
END
declare @pagecount int --接收總頁數
declare @recordcount int --接收總記錄條數
exec TempPage 4,1,@pagecount output, @recordcount output
select @pagecount as [pagecount];
select @recordcount as recordcount;
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DBO].[paging_procedure]') AND OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [DBO].[paging_procedure]
GO
CREATE PROCEDURE paging_procedure
@PageSize INT, --每頁大小
@PapeIndex INT, --當前索引
@PageCount INT OUTPUT, --返回總頁數
@RecordCount INT OUTPUT --返回總記錄條數
AS
BEGIN
SELECT TOP (SELECT @PageSize) * -- 這裡注意一下,不能直接把變數放在這裡,要用SELECT
FROM (SELECT ROW_NUMBER() OVER(ORDER BY OrderGuid) AS RowNumber,* FROM OrderProduct) TEMP_ROW
WHERE RowNumber>(@PapeIndex-1)*@PageSize;
--查詢總記錄條數
SELECT @RecordCount=COUNT(1) FROM OrderProduct
--計算總頁數
SET @PAGECOUNT = CEILING(@RecordCount*1.0/@PageSize)
END
declare @pagecount int --接收總頁數
declare @recordcount int --接收總記錄條數
exec paging_procedure 4,1,@pagecount output, @recordcount output
select @pagecount as [pagecount];
select @recordcount as recordcount;
相關文章
- SQL 分頁儲存過程SQL儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- Oracle服務啟動-索引-子查詢-分頁儲存過程問題Oracle索引儲存過程
- MyBatis(八) 資料庫BLOB讀寫、批量更新操作、儲存過程呼叫、分表、分頁MyBatis資料庫儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程
- JAVA儲存過程(轉)Java儲存過程
- MySQL之儲存過程MySql儲存過程
- oracle的儲存過程Oracle儲存過程
- MySQL---------儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- mysql儲存過程整理MySql儲存過程
- Oracle儲存過程-1Oracle儲存過程
- mongo 儲存過程詳解Go儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- jsp中呼叫儲存過程JS儲存過程
- 資料庫儲存過程資料庫儲存過程
- mybatis儲存過程返回listMyBatis儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- SqlServer儲存過程應用二:分頁查詢資料並動態拼接where條件SQLServer儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式