某分頁儲存過程

2021-04-17 01:00:05 字數 3012 閱讀 4609

create proc sp_pageview

@tbname sysname, --要分頁顯示的表名

@fieldkey nvarchar(1000), --用於定位記錄的主鍵(惟一鍵)字段,可以是逗號分隔的多個字段

@pagecurrent int=1, --要顯示的頁碼

@pagesize int=10, --每頁的大小(記錄數)

@fieldshow nvarchar(1000)='', --以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段

@fieldorder nvarchar(1000)='', --以逗號分隔的排序字段列表,可以指定在字段後面指定desc/asc用於指定排序順序

@where nvarchar(1000)='', --查詢條件

@pagecount int output --總頁數

asset nocount on

--檢查物件是否有效

if object_id(@tbname) is null

begin

raiserror(n'物件"%s"不存在',1,16,@tbname)

return

endif objectproperty(object_id(@tbname),n'istable')=0

and objectproperty(object_id(@tbname),n'isview')=0

and objectproperty(object_id(@tbname),n'istablefunction')=0

begin

raiserror(n'"%s"不是表、檢視或者錶值函式',1,16,@tbname)

return

end--分頁字段檢查

if isnull(@fieldkey,n'')=''

begin

raiserror(n'分頁處理需要主鍵(或者惟一鍵)',1,16)

return

end--其他引數檢查及規範

if isnull(@pagecurrent,0)<1 set @pagecurrent=1

if isnull(@pagesize,0)<1 set @pagesize=10

if isnull(@fieldshow,n'')=n'' set @fieldshow=n'*'

if isnull(@fieldorder,n'')=n''

set @fieldorder=n''

else

set @fieldorder=n'order by '+ltrim(@fieldorder)

if isnull(@where,n'')=n''

set @where=n''

else

set @where=n'where ('+@where+n')'

--如果@pagecount為null值,則計算總頁數(這樣設計可以只在第一次計算總頁數,以後呼叫時,把總頁數傳回給儲存過程,避免再次計算總頁數,對於不想計算總頁數的處理而言,可以給@pagecount賦值)

if @pagecount is null

begin

declare @sql nvarchar(4000)

set @sql=n'select @pagecount=count(*)'

+n' from '+@tbname

+n' '+@where

exec sp_executesql @sql,n'@pagecount int output',@pagecount output

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

end--計算分頁顯示的topn值

declare @topn varchar(20),@topn1 varchar(20)

select @topn=@pagesize,

@topn1=@pagecurrent*@pagesize

--第一頁直接顯示

if @pagecurrent=1

exec(n'select top '+@topn

+n' '+@fieldshow

+n' from '+@tbname

+n' '+@where

+n' '+@fieldorder)

else

begin

--生成主鍵(惟一鍵)處理條件

declare @where1 nvarchar(4000),@s nvarchar(1000)

select @where1=n'',@s=@fieldkey

while charindex(n',',@s)>0

select @s=stuff(@s,1,charindex(n',',@s),n''),

@where1=@where1

+n' and a.'+left(@s,charindex(n',',@s)-1)

+n'='+left(@s,charindex(n',',@s)-1)

select @where1=stuff(@where1+n' and a.'+@s+n'='+@s,1,5,n''),

@topn=@topn1-@pagesize

--執行查詢

exec(n'set rowcount '+@topn1

+n' select '+@fieldkey

+n' into # from '+@tbname

+n' '+@where

+n' '+@fieldorder

+n' set rowcount '+@topn

+n' delete from #'

+n' select '+@fieldshow

+n' from '+@tbname

+n' a where exists(select * from # where '+@where1

+n') '+@fieldorder)

end

分頁儲存過程 分頁儲存過程

分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...

分頁儲存過程

create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...

分頁儲存過程

create procedure pro select pageindex int,pagesize int as select student.sno,student.sname,student.s grade.math,grade.physics,grade.huaxue,grade.chine...