儲過程實現簡單的資料分頁

2022-02-20 09:03:16 字數 3206 閱讀 3869

建立儲存過程的sql語句:

use

[db_wms]/*

db_wms 為資料庫名稱,可替換

*/go

/****** object: storedprocedure [dbo].[procpaging] script date: 01/24/2014 16:05:00 *****

*/set ansi_nulls on

goset quoted_identifier on

gocreate

proc

[dbo

].[procpaging](

@tablename

nvarchar(20

),

@orderby

nvarchar(10

),

@pagesize

int,

@pagecurrentindex

int,/*

起始頁為0

*/@where

nvarchar(2000

),

@pagecount

intoutput,

@recordcount

intoutput)as

begin

ifisnull(@where,'')=

''set

@where

=n''

else

set@where

=n'where '+

@where

declare

@top

int,@sql

nvarchar(4000

)

/*記錄資料總數

*/begin

set@sql

= n'

select @recordcount = count(*) from '+

@tablename

+@where

exec sp_executesql @sql,n'

@recordcount int output

',@recordcount

output

end/*

計算總頁數

*/set

@pagecount

=ceiling(@recordcount

*1.0

/@pagesize

)

/*計算要獲取的頁面的top資料

*/set

@top

=@pagecurrentindex

*@pagesize

/*如果是第一頁或者總頁數為1

*/if

@pagecurrentindex=0

or@pagecount

<=

1begin

set@sql

=n'select top('+

convert(nvarchar(10), @pagesize)+n'

) * from '+

@tablename

+@where

+ n'

order by '+

@orderby

exec sp_executesql @sql

endelse

begin

/*如果是最後一頁

*/if

@pagecurrentindex

=@pagecount-1

begin

set@sql

=n'select top('+

convert(nvarchar(10), @recordcount) + n'- '

+convert(nvarchar(10), @top) + n'

) * from '+

@tablename

+@where

+ n'

order by '+

@orderby

+n'desc

'exec sp_executesql @sql

endelse

begin

set@sql

= n'

select top('+

convert(nvarchar(10), @pagesize) + n'

) * from (select top('+

convert(nvarchar(10), @top) + n'+ '

+convert(nvarchar(10), @pagesize) + n'

) * from '+

@tablename

+@where

+ n'

order by '+

@orderby

+n'asc) t order by '+

@orderby

+n'desc

'exec sp_executesql @sql

endend

select

@pagecountas'

pagecount

',@recordcountas'

recordcount

',@pagecurrentindex

'index

'end

go

後台呼叫儲存過程**:

public

static dataset excuteprocpaging(string tablename,string orderby,int pagecurrentindex, string @where, out

intpagecount)

//資料介面卡執行儲存過程

using (sqldataadapter sda = new

sqldataadapter())

catch

finally

}return

ds; }

}

在對儲存過程引數賦值後,除了資料介面卡sqldataadapter執行儲存過程外,還可以通過command.executescalar()方法執行儲存過程。下面一段**跟資料分頁無關。

public

static

string excuteprocheck(string username, string

pwd)

catch

finally

}}

SQL Server儲過程分頁演算法研究

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

簡單的分頁儲存過程

傳入參數列名 當前頁 每頁大小 查詢字段傳入自己需要的資料 也可以全部。where條件可以為空。排序欄位按自己的需求設定 create procedure prc page result in tablename varchar 100 表名 in currpage int,當前頁 in pages...

利用儲存過程實現資料分頁

利用ms sql2000的儲存過程實現資料分頁讀取,可簡化讀取的資料量。本過程的優點在於,輸入的sql語句沒有限制條件,而且寫法和思路都很簡單明瞭。create procedure dbo pageshow sql varchar 8000 where語句 pagesize int 10,每頁的大小...