通用儲存過程

2021-05-27 08:57:56 字數 2458 閱讀 3872

alter proc [dbo].[pagination]

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

@pagecurrent int=1 ,--當前要顯示的頁號

@fdname varchar(100)='' ,--主鍵名或者標識列名

@selectstr varchar(2000)='', --select子句,不包含select關鍵字,如:*或者id,userid,username等。

@fromstr varchar(1000)='', --from子句,不包含from關鍵子,如:mytable或者mytable,yourtable

@wherestr varchar(2000)='', --where子句,不包含where關鍵字,如空的,或者 id>2 等

@orderbystr varchar(1000)='',--order by 子句,不包含order by 子句 ,如id desc,userid asc 等

@countrows int=0 output, --返回記錄總數

@countpage int=0 output --返回總頁數

as--------定義區域性變數---------

declare @id1 varchar(20),@id2 varchar(20) --開始和結束的記錄號

declare @orderbysqls varchar(1000) --order by 子句

declare @wheresqls varchar(2000) --where 子句

declare @sqls nvarchar(4000) --最終組合成的sqls語句

declare @tmpstr varchar(2000) --臨時

----------------------------

if @orderbystr <> ''

set @orderbysqls = ' order by '+@orderbystr

else

set @orderbysqls = ''

--------

if @wherestr <> ''

set @wheresqls = ' where ('+@wherestr+')'

else

set @wheresqls = ''

--------

set @tmpstr = @wheresqls

--如果顯示第一頁,可以直接用top來完成

if @pagecurrent<=1 

begin

select @id1=cast(@pagesize as varchar(20))

exec('select top '+@id1+' '+@selectstr+' from '+@fromstr+@wheresqls+@orderbysqls)

goto labelres

end---------------------------

select @id1=cast(@pagesize as varchar(20))

,@id2=cast((@pagecurrent-1)*@pagesize as varchar(20))

----------

if @wheresqls <> ''

set @wheresqls = @wheresqls + ' and (' + @fdname+' not in(select top '+@id2+' '+@fdname+' from '+@fromstr+@wheresqls+@orderbysqls+'))'

else

set @wheresqls = ' where ' + @fdname+' not in(select top '+@id2+' '+@fdname+' from '+@fromstr+@wheresqls+@orderbysqls+')'

----------

set @sqls = 'select top '+@id1+ ' '+ @selectstr+' from '+@fromstr+@wheresqls+@orderbysqls

exec (@sqls)

-----------

labelres:

-----返回總記錄數

set @sqls = 'select @a=count(1) from '+@fromstr+@tmpstr

exec sp_executesql @sqls,n'@a int output',@countrows output 

-----返回總頁數

if @countrows <= @pagesize

set @countpage = 1

else

begin

set @countpage = @countrows/@pagesize

if (@countrows%@pagesize) > 0

set @countpage = @countpage + 1

endreturn

通用儲存過程

set ansi nulls on set quoted identifier on gocreate procedure dbo getdatawithpage tablename nvarchar max 表名 fields nvarchar max 各欄位 where nvarchar max...

通用儲存過程 分頁儲存過程

名稱 spall returnrows 輸入 輸出 呼叫 exec spall returnrows select from 表名 頁號,返回記錄數,主鍵 排序字段 spall returnrows select from all categories 2,10,id id 說明 百萬級 通用儲存過...

通用分頁儲存過程

create procedure sp page strtable varchar 50 表名 strcolumn varchar 50 按該列來進行分頁 intcoltype int,strcolumn列的型別,0 數字型別,1 字元型別,2 日期時間型別 intorder bit,排序,0 順序...