一個(gè)基于ROW_NUMBER()的通用分頁(yè)存儲(chǔ)過(guò)程代碼
更新時(shí)間:2010年10月22日 16:43:34 作者:
項(xiàng)目中有很多小型的表(數(shù)據(jù)量不大),都需要實(shí)現(xiàn)分頁(yè)查詢,因此實(shí)現(xiàn)了一個(gè)通用的分頁(yè)。
建立好如下的存儲(chǔ)過(guò)程,以后要分頁(yè),直接調(diào)用改存儲(chǔ)過(guò)程就可以了。
注意:數(shù)據(jù)量大、性能要求高的,請(qǐng)個(gè)性化處理。
ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage]
@Sql VARCHAR(5000),
@CurrentPageNo INT,
@PageSize INT,
@TotalNum INT OUTPUT
AS
SET NOCOUNT ON
DECLARE @SqlCmd VARCHAR(5000)
------------------------------------------ --查詢數(shù)據(jù)
SET @SqlCmd = 'SELECT * FROM (' + @Sql + ') A WHERE RowIndex BETWEEN ' + CONVERT(VARCHAR,(@CurrentPageNo-1) * @PageSize + 1) + ' AND ' + CONVERT(VARCHAR,@CurrentPageNo * @PageSize)
EXEC(@SqlCmd) PRINT (@SqlCmd)
------------------------------------------ --求記錄總數(shù)
IF @TotalNum = -1
BEGIN
CREATE TABLE #Temp1(num INT)
INSERT INTO #Temp1
EXEC('SELECT count(*) FROM (' + @Sql + ') A')
SELECT @TotalNum=(SELECT * FROM #Temp1)
DROP TABLE #Temp1
END
用法很簡(jiǎn)單,但必須在傳入的SQL中使用ROW_NUMBER() OVER(...) AS RowIndex :
DECLARE @Sql VARCHAR(5000)
DECLARE @CurrentPageNo INT
DECLARE @PageSize INT
DECLARE @TotalNum INT
SET @CurrentPageNo = 100
SET @PageSize = 10
SET @TotalNum = -1
SET @Sql = ' SELECT *, ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowIndex FROM 表名 A WITH (NOLOCK) '
EXEC [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql,@CurrentPageNo,@PageSize,@TotalNum OUTPUT
SELECT @TotalNum
注意:數(shù)據(jù)量大、性能要求高的,請(qǐng)個(gè)性化處理。
復(fù)制代碼 代碼如下:
ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage]
@Sql VARCHAR(5000),
@CurrentPageNo INT,
@PageSize INT,
@TotalNum INT OUTPUT
AS
SET NOCOUNT ON
DECLARE @SqlCmd VARCHAR(5000)
------------------------------------------ --查詢數(shù)據(jù)
SET @SqlCmd = 'SELECT * FROM (' + @Sql + ') A WHERE RowIndex BETWEEN ' + CONVERT(VARCHAR,(@CurrentPageNo-1) * @PageSize + 1) + ' AND ' + CONVERT(VARCHAR,@CurrentPageNo * @PageSize)
EXEC(@SqlCmd) PRINT (@SqlCmd)
------------------------------------------ --求記錄總數(shù)
IF @TotalNum = -1
BEGIN
CREATE TABLE #Temp1(num INT)
INSERT INTO #Temp1
EXEC('SELECT count(*) FROM (' + @Sql + ') A')
SELECT @TotalNum=(SELECT * FROM #Temp1)
DROP TABLE #Temp1
END
用法很簡(jiǎn)單,但必須在傳入的SQL中使用ROW_NUMBER() OVER(...) AS RowIndex :
DECLARE @Sql VARCHAR(5000)
DECLARE @CurrentPageNo INT
DECLARE @PageSize INT
DECLARE @TotalNum INT
SET @CurrentPageNo = 100
SET @PageSize = 10
SET @TotalNum = -1
SET @Sql = ' SELECT *, ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowIndex FROM 表名 A WITH (NOLOCK) '
EXEC [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql,@CurrentPageNo,@PageSize,@TotalNum OUTPUT
SELECT @TotalNum
您可能感興趣的文章:
- sqlserver 通用存儲(chǔ)過(guò)程分頁(yè)代碼(附使用ROW_NUMBER()和不使用ROW_NUMBER()兩種情況性能分析)
- sqlserver2005使用row_number() over分頁(yè)的實(shí)現(xiàn)方法
- Oracle row_number() over()解析函數(shù)高效實(shí)現(xiàn)分頁(yè)
- C#拼接SQL語(yǔ)句 用ROW_NUMBER實(shí)現(xiàn)的高效分頁(yè)排序
- SQL2005利用ROW_NUMBER() OVER實(shí)現(xiàn)分頁(yè)功能
- 高效的SQLSERVER分頁(yè)查詢(推薦)
- 解析數(shù)據(jù)庫(kù)分頁(yè)的兩種方法對(duì)比(row_number()over()和top的對(duì)比)
- 使用row_number()實(shí)現(xiàn)分頁(yè)實(shí)例
- SQLSERVER分頁(yè)查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同
- SQL Server使用row_number分頁(yè)的實(shí)現(xiàn)方法
相關(guān)文章
SQL Server約束增強(qiáng)的兩點(diǎn)建議
我們可以在CHECK的約束條件中加入任何邏輯表達(dá)式,而目前所有外鍵只能用來(lái)驗(yàn)證一個(gè)或多個(gè)列的值是否相等。2009-05-05
設(shè)置密碼保護(hù)的SqlServer數(shù)據(jù)庫(kù)備份文件與恢復(fù)文件的方法
設(shè)置密碼保護(hù)的SqlServer數(shù)據(jù)庫(kù)備份文件與恢復(fù)文件的方法,需要的朋友可以參考下。2011-10-10
SQL Server數(shù)據(jù)庫(kù)開發(fā)的二十一條法則
如果你正在負(fù)責(zé)一個(gè)基于SQL Server的項(xiàng)目,或者你剛剛接觸SQL Server,你都有可能要面臨一些數(shù)據(jù)庫(kù)性能的問(wèn)題,這篇文章會(huì)為你提供一些有用的指導(dǎo)(其中大多數(shù)也可以用于其它的DBMS)。2010-06-06
SQL?Server?2008?R2完美卸載教程(親測(cè)有用)
SQL Server 2008 R2是一款非常強(qiáng)大的數(shù)據(jù)庫(kù)管理系統(tǒng),但在某些情況下可能需要卸載它,下面這篇文章主要給大家介紹了關(guān)于SQL?Server?2008?R2完美卸載的相關(guān)資料,需要的朋友可以參考下2023-11-11
SQL Server 2008 清空刪除日志文件(瞬間縮小日志到幾M)
sql 在使用中每次查詢都會(huì)生成日志,但是如果你長(zhǎng)久不去清理,可能整個(gè)硬都堆滿哦,筆者就遇到這樣的情況,直接網(wǎng)站后臺(tái)都進(jìn)不去了。下面我們一起來(lái)學(xué)習(xí)一下如何清理這個(gè)日志吧2018-10-10

