通用分頁儲存過程

2021-04-12 13:06:50 字數 2825 閱讀 5143

create   procedure   sp_page  

@strtable       varchar(50),   --表名  

@strcolumn      varchar(50),   --按該列來進行分頁  

@intcoltype     int,           --@strcolumn列的型別,0-數字型別,1-字元型別,2-日期時間型別  

@intorder       bit,           --排序,0-順序,1-倒序  

@strcolumnlist  varchar(800),  --要查詢出的字段列表,*表示全部字段  

@intpagesize    int,           --每頁記錄數  

@intpagenum     int,           --指定頁  

@strwhere       varchar(800),  --查詢條件  

@intpagecount   int   output   --總頁數  

asdeclare   @sql    nvarchar(4000) --用於構造sql語句

declare   @where1 varchar(800)   --構造條件語句

declare   @where2 varchar(800)   --構造條件語句

if   @strwhere   is   null   or   rtrim(@strwhere)=''  

-- 為了避免sql關鍵字與字段、表名等連在一起,首先為傳入的變數新增空格

begin  --沒有查詢條件  

set   @where1=' where '  

set   @where2=' '  

end  

else  

begin  --有查詢條件  

set   @where1=' where  ('+@strwhere+')  and  '

set   @where2=' where  ('+@strwhere+')  '  

endset @strcolumn = ' ' + @strcolumn + ' '

set @strcolumnlist = ' ' + @strcolumnlist + ' '

--構造sql語句,計算總頁數。計算公式為 總頁數 = ceiling ( 記錄個數 / 頁大小 )

set   @sql='select   @intpagecount=ceiling((count(*)+0.0)/'

+ cast(@intpagesize   as   varchar)

+ ')   from   ' + @strtable + @where2  

--執行sql語句,計算總頁數,並將其放入@intpagecount變數中

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

--將總頁數放到查詢返回記錄集的第乙個欄位前,此語句可省略

set  @strcolumnlist=' ' + cast(@intpagecount as varchar(30)) + ' as pagecount,' + @strcolumnlist  

if   @intorder=0   --構造公升序的sql

set @sql='select top '+ cast(@intpagesize   as   varchar)  +

@strcolumnlist +  

' from ' + @strtable + @where1 +

@strcolumn + '>(select max('+@strcolumn+')  '+  

' from (select top '+ cast(@intpagesize*(@intpagenum - 1)  as  varchar) +  

@strcolumn + ' from '+ @strtable+@where2+'order  by '+@strcolumn+')  t)  order  by '+ @strcolumn  

else              --構造降序的sql  

set @sql='select top '+ cast(@intpagesize   as   varchar)  +

@strcolumnlist+  

' from '+ @strtable + @where1 +

@strcolumn + '<(select   min('+@strcolumn+')   '+  

' from (select top '+ cast(@intpagesize*(@intpagenum - 1)  as  varchar) +  

@strcolumn + ' from '+ @strtable+@where2+'order   by '+@strcolumn+'   desc)   t)   order   by   '+  

@strcolumn + ' desc'       

if   @intpagenum=1--第一頁  

set   @sql='select   top   '+cast(@intpagesize   as   varchar) + @strcolumnlist + ' from '+@strtable+  

@where2+'order   by   '+@strcolumn+case   @intorder when  0 then  ''  else  '  desc' 

end  

--print   @sql  

exec(@sql)

go

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

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

通用分頁儲存過程

set quoted identifier on goset ansi nulls off go declare p1 int set p1 null exec sp pageview tbname n v question list fieldkey n id pagecurrent 3,page...

通用分頁儲存過程

通用分頁儲存過程 create proc commonpagination columns varchar 500 要顯示的列名,用逗號隔開 tablename varchar 100 要查詢的表名 ordercolumnname varchar 100 排序的列名 order varchar 50...