mssql 高效的分頁存儲過程分享
最近在做一個幾百萬條數(shù)據(jù)的分頁查詢,研究了各種方案,在本機上用項目的實際數(shù)據(jù)庫做測試,測試過程 is very 痛苦,不堪回首ing?,F(xiàn)在廢話不多說,直接上結(jié)果,相信這也是大多數(shù)搜索答案的人最愿意看的方式。
以下是存儲過程的代碼:
CREATE PROCEDURE [dbo].[P_GridViewPager] (
@recordTotal INT OUTPUT, --輸出記錄總數(shù)
@viewName VARCHAR(800), --表名
@fieldName VARCHAR(800) = '*', --查詢字段
@keyName VARCHAR(200) = 'Id', --索引字段
@pageSize INT = 20, --每頁記錄數(shù)
@pageNo INT =1, --當(dāng)前頁
@orderString VARCHAR(200), --排序條件
@whereString VARCHAR(800) = '1=1' --WHERE條件
)
AS
BEGIN
DECLARE @beginRow INT
DECLARE @endRow INT
DECLARE @tempLimit VARCHAR(200)
DECLARE @tempCount NVARCHAR(1000)
DECLARE @tempMain VARCHAR(1000)
--declare @timediff datetime
set nocount on
--select @timediff=getdate() --記錄時間
SET @beginRow = (@pageNo - 1) * @pageSize + 1
SET @endRow = @pageNo * @pageSize
SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)
--輸出參數(shù)為總記錄數(shù)
SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'
EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT
--主查詢返回結(jié)果集
SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (order by '+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit
--PRINT @tempMain
EXECUTE (@tempMain)
--select datediff(ms,@timediff,getdate()) as 耗時
set nocount off
END
GO
相關(guān)文章
SQL?Server2019安裝的詳細步驟實戰(zhàn)記錄(親測可用)
SQL Server 2019作為編程人員必須使用到的一款數(shù)據(jù)庫管理軟件,許多初學(xué)者在安裝這款軟件的時候都出現(xiàn)了各種各樣的問題,下面這篇文章主要給大家介紹了關(guān)于SQL?Server2019安裝的詳細步驟,需要的朋友可以參考下2022-06-06SQLserver存儲過程寫法與設(shè)置定時執(zhí)行存儲過程方法詳解
一直都很想了解如何寫存儲過程,對于不熟悉的東西,總是覺得很神秘,下面這篇文章主要給大家介紹了關(guān)于SQLserver存儲過程寫法與設(shè)置定時執(zhí)行存儲過程方法的相關(guān)資料,需要的朋友可以參考下2023-03-03SQLServer 數(shù)據(jù)庫備份過程中經(jīng)常遇到的九種情況
SQLServer 數(shù)據(jù)庫備份過程中經(jīng)常遇到各種問題,大家可以參照下面的問題,來分析下,快速的解決問題。2009-07-07Windows Server2008 R2 MVC 環(huán)境安裝配置教程
這篇文章主要為大家詳細介紹了Windows Server2008 R2 MVC 環(huán)境安裝配置教程,感興趣的小伙伴們可以參考一下2016-09-09動態(tài)給表添加刪除字段并同時修改它的插入更新存儲過程
有一個表,用戶需要在后臺操作它,希望能對它動態(tài)進行添加刪除字段2011-11-11在SQL Server數(shù)據(jù)庫中為標(biāo)識(IDENTITY)列插入顯式值
SQL Server中的標(biāo)識列和ACCESS中的“自動編號”相似,都是插入記錄的時候自動生成,一般不允許也不需要我們?nèi)ナ謩有薷乃?/div> 2007-02-02巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行
這篇文章主要介紹了巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行,需要的朋友可以參考下2014-08-08用SQL語句實現(xiàn)隨機查詢數(shù)據(jù)并不顯示錯誤數(shù)據(jù)的方法
用SQL語句實現(xiàn)隨機查詢數(shù)據(jù)并不顯示錯誤數(shù)據(jù)的方法...2007-11-11最新評論