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儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- oracle儲存過程分頁程式碼Oracle儲存過程
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- 簡單的儲存過程分頁儲存過程
- 簡單的分頁儲存過程儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- 兩種SQL分頁方法儲存過程和遊標儲存過程SQL儲存過程
- sqlserver儲存過程實現多表分頁SQLServer儲存過程
- 分頁控制元件及儲存過程控制元件儲存過程
- [MSSQL]mssql海量高效分頁儲存過程SQL儲存過程
- ORACLE高效分頁儲存過程程式碼Oracle儲存過程
- 基於ROWCOUNT的分頁儲存過程儲存過程
- 使用儲存過程實現分頁列印 (轉)儲存過程
- SQLServer 2005通用分頁儲存過程SQLServer儲存過程
- 拋磚引玉——通用分頁儲存過程儲存過程
- SQL SERVER 2005分頁儲存過程SQLServer儲存過程
- 儲存過程分頁 Ado.Net分頁 EF分頁 滿足90%以上儲存過程
- SQL Server 儲存過程的經典分頁(轉)SQLServer儲存過程
- asp.net利用儲存過程分頁程式碼ASP.NET儲存過程
- 完整的分頁儲存過程以及c#呼叫方法儲存過程C#
- 一個比較不錯的儲存過程分頁儲存過程
- [Procedure]Oracle之分頁儲存過程Oracle儲存過程
- 淺述asp.net海量分頁資料儲存過程ASP.NET儲存過程
- SQL Server 2000 的分頁查詢(儲存過程)SQLServer儲存過程
- asp.net分頁的SQL語句及儲存過程ASP.NETSQL儲存過程
- MySQL儲存過程-->長字串扯分MySql儲存過程字串
- asp.net SQL Server 儲存過程分頁及程式碼呼叫ASP.NETSQLServer儲存過程
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- 支援DISTINCT的通用分頁儲存過程(SQL2005)儲存過程SQL
- asp.net分頁控制元件AspNetPager的使用,使用傳統分頁和儲存過程分頁ASP.NET控制元件儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 儲存過程儲存過程
- 簡單談基於SQL SERVER 分頁儲存過程的演進SQLServer儲存過程
- 可用。儲存分頁