乙個高效的分頁儲存過程

2022-02-21 13:34:22 字數 2334 閱讀 3776

最近在做乙個幾百萬條資料的分頁查詢,研究了各種方案,在本機上用專案的實際資料庫做測試,測試過程 is very 痛苦,不堪回首ing。現在廢話不多說,直接上結果,相信這也是大多數搜尋答案的人最願意看的方式。

以下是儲存過程的**:

1

create

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...