可按任意字段排序的分頁儲存過程

2021-07-30 12:07:54 字數 2102 閱讀 9896

create procedure dbo.getpagingrecord 

( @tablename varchar(100),--表名或檢視表

@fieldlist varchar(4000)='*',--欲選擇字段列表

@orderfield varchar(100),--排序字段

@keyfield varchar(100),--主鍵

@pageindex int,--頁號,從0開始

@pagesize int=20,--頁尺寸

@strwhere varchar(4000),--條件

@ordertype bit=1--排序,1,降序,0,公升序

) as /*

名稱:getpagingrecord

作用:按任意字段進行排序分頁

*/ set nocount on

declare @sqlstr varchar(6000)

--處理sql中危險字元,並且將條件處理成易嵌入的形式

set @strwhere=replace(@strwhere,'''','''''')

set @strwhere=replace(@strwhere,'--','')

set @strwhere=replace(@strwhere,';','')

set @sqlstr='declare @curpagenum int;'

set @sqlstr=@sqlstr+'declare @nextpagenum int;'

set @sqlstr=@sqlstr+'set @curpagenum='+cast(@pageindex as varchar)+'*'+cast(@pagesize as varchar)+';'

set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@pageindex+1 as varchar)+'*'+cast(@pagesize as varchar)+';'

set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);'

if @ordertype=1

begin

set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from

'+@tablename+' where '+@strwhere+' order by '+@orderfield+' desc ) as a where '+@keyfield+' not in (

select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'

order by '+@orderfield+' desc) order by '+@orderfield+' desc'';'

end

else

begin

set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from

'+@tablename+' where '+@strwhere+' order by '+@orderfield+' asc ) as a where '+@keyfield+' not in (

select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'

order by '+@orderfield+' asc) order by '+@orderfield+' asc'';'

end

set @sqlstr=@sqlstr+'execute( @sqlstr)'

--print @sqlstr

execute(@sqlstr)

可以多個字段排序的分頁儲存過程

create proc sp pagelist tbname sysname,要分頁顯示的表名 fieldkey sysname,用於定位記錄的主鍵 惟一鍵 字段,只能是單個字段 pagecurrent int 1,要顯示的頁碼 pagesize int 10,每頁的大小 記錄數 fieldshow...

分頁儲存過程 排序

用途 支援任意排序的分頁儲存過程 說明 create procedure up getrecordbypageorder tblname varchar 255 表名 fldname varchar 255 顯示欄位名 orderfldname varchar 255 排序欄位名 statfldna...

可以依據任何字段進行排序並分頁的儲存過程

之前用過的一些儲存過程分頁 大多數都只能根據主鍵排序,可是實際上,我們經常需要依據非主鍵排序並分頁,比如,按工資大小 下面的 能完成工作 alter procedure dbo.getpagerecord tblname varchar 255 表名 fldname varchar 255 排序字段...