最近在做乙個幾百萬條資料的分頁查詢,研究了各種方案,在本機上用專案的實際資料庫做測試,測試過程 is very 痛苦,不堪回首ing。現在廢話不多說,直接上結果,相信這也是大多數搜尋答案的人最願意看的方式。
以下是儲存過程的**:
1create
procedure
[dbo
].[p_gridviewpager](
2@recordtotal
int output, --
輸出記錄總數
3@viewname
varchar(800), --表名4
@fieldname
varchar(800) ='*
', --
查詢字段
5@keyname
varchar(200) ='id
', --
索引字段
6@pagesize
int=
20, --
每頁記錄數
7@pageno
int=
1, --
當前頁8
@orderstring
varchar(200), --
排序條件
9@wherestring
varchar(800) =
'1=1'--
where條件10)
11as
12begin
13declare
@beginrow
int14
declare
@endrow
int15
declare
@templimit
varchar(200)16
declare
@tempcount
nvarchar(1000)17
declare
@tempmain
varchar(1000)18
--declare @timediff datetime
1920
set nocount on
21--
select @timediff=getdate() --記錄時間
2223
set@beginrow
= (@pageno
-1) *
@pagesize+1
24set
@endrow
=@pageno
*@pagesize
25set
@templimit='
rows between '+
cast(@beginrow
asvarchar) +
'and '+
cast(@endrow
asvarchar)26
27--
輸出引數為總記錄數
28set
@tempcount='
select @recordtotal = count(*) from (select '+
@keyname+'
from '+
@viewname+'
where '+
@wherestring+'
) as my_temp'29
execute sp_executesql @tempcount,n'
@recordtotal int output
',@recordtotal
output
3031
--主查詢返回結果集
32set
@tempmain='
select * from (select row_number() over (order by '+
@orderstring+'
) as rows ,'+
@fieldname+'
from '+
@viewname+'
where '+
@wherestring+'
) as main_temp where '+
@templimit
3334
--print @tempmain
35execute (@tempmain)36
--select datediff(ms,@timediff,getdate()) as 耗時
3738
set nocount off
39end
4041
go
完工!
乙個高效的資料分頁的儲存過程
create procedure pagetest 用於翻頁的測試 需要把排序字段放在第一列 asif curpage 0 begin 統計總記錄數 select allcount count productid from product test set pagesize 10 返回第一頁的資料 ...
乙個高效的資料分頁的儲存過程
高效的資料分頁的儲存過程 create procedure pagetest 用於翻頁的測試 需要把排序字段放在第一列 asif curpage 0 begin 統計總記錄數 select allcount count productid from product test set pagesize...
乙個分頁儲存過程
page language c import namespace system.data import namespace system.data.sqlclient 訂單號 服務專案 預訂日期 操作人員 分配狀態 databinder.eval container.dataitem,offerid...