SQL分頁儲存過程

2022-09-16 06:30:10 字數 1337 閱讀 7739

create proc [dbo].[pagetest]

@pagesize int,         --每頁顯示記錄數

@currentpage int,      --當前頁

@datastatus int,

@isvalid int,

@rowcount int output, --總記錄數

@pagecount int output --總頁數

asselect

@rowcount=count(*)

from dbo.task

where datastatus=@datastatus and isvalid=@isvalid

if @rowcount%@pagesize>0

set @pagecount=(@rowcount/@pagesize)+1

else set @pagecount=@rowcount/@pagesize

begin

select * 

from

(select

rownum=row_number() over (order by id),

id,subject,

status,

isvalid

from dbo.cpf_task

where datastatus=@datastatus

and (@isvalid is null or @isvalid =-1 or @isvalid =isvalid) 

)as t

where t.rownum between (@currentpage*@pagesize+1)and(@currentpage*@pagesize+@pagesize)

end說明:總頁數和總記錄數是需要輸出的引數,在宣告時要加上output。row_number()函式是sql2005中新增的乙個函式,它通常被用在分頁的sql語句中。可以理解為函式可以為表中的某個字段建立從1開始的序列。或者這樣理解,這個函式根據給定的字段建立了乙個新的,從1開始的資料列。from 後面的語句是將括號中select 查到的資料集暫時命名為t,然後根據這個資料集的新列和傳入的當前頁索引和頁碼大小的運算取到當前頁面應該顯示的記錄集合。 這裡還要注意括號中where條件的寫法,datastatus=@datastatusand (@isvalid is null or @isvalid =-1 or @isvalid =isvalid) 。當儲存過程中有條件查詢時,例如要以主題、狀態、時間、作者來查詢記錄時,四個條件可以自由組合查詢,此時可採用(@condition is null or @condition is "" or @condition =condition)and (...)的方式來實現。

sql 儲存過程分頁

create proc myx prpagerecordset querystr nvarchar 1000 keyfield nvarchar 200 pagesize int,pagenumber int as begin declare sqltext as nvarchar 4000 dec...

SQL 儲存過程 分頁

1.俄羅斯儲存過程 的改良版 create procedure pagination1 pagesize int,頁面大小,如每頁儲存20條記錄 pageindex int 當前頁碼 as set nocount on begin declare indextable table id int id...

SQL 分頁儲存過程

create procedure splitpage sql nvarchar 4000 不帶排序語句的sql語句 page int,頁碼 recsperpage int,每頁容納的記錄數 id varchar 255 需要排序的不重複的id號 sort varchar 255 排序欄位及規則 as...