SQL萬能儲存過程分頁

2022-07-19 23:15:27 字數 2639 閱讀 8675

alter proc [dbo].[proc_pager]

@tablename varchar(50),            --表名

@refieldsstr varchar(200) = '*',   --欄位名(全部欄位為*)

@orderstring varchar(200),         --排序字段(必須)

@wherestring varchar(500) =n'',  --條件語句(不用加where)

@pagesize int,                     --每頁多少條記錄

@pageindex int = 1 ,               --指定當前為第幾頁

@totalrecord int output            --返回總記錄數

asbegin

--處理開始點和結束點

declare @startrecord int;

declare @endrecord int; 

declare @totalcountsql nvarchar(500); 

declare @sqlstring nvarchar(2000);    

set @startrecord = (@pageindex-1)*@pagesize + 1--起始記錄

set @endrecord = @startrecord + @pagesize - 1 --結尾記錄

set @totalcountsql= n'select @totalrecord = count(*) from ' + @tablename;--總記錄數語句

set @sqlstring = n'(select row_number() over (order by '+ @orderstring +') as rowid,'+@refieldsstr+' from '+ @tablename;--查詢語句

--if (@wherestring! = '' or @wherestring!=null)

begin

set @totalcountsql=@totalcountsql + '  where '+ @wherestring;

set @sqlstring =@sqlstring+ '  where '+ @wherestring;            

end--第一次執行得到

exec sp_executesql @totalcountsql,n'@totalrecord int out',@totalrecord output;--返回總記錄數

----執行主語句

set @sqlstring ='select * from ' + @sqlstring + ') as t where rowid between ' + ltrim(str(@startrecord)) + ' and ' +  ltrim(str(@endrecord));

exec(@sqlstring)    

end/**********************************/

第二種alter proc fenye

@tabename nvarchar(500),--表名稱

@filename nvarchar(500),--欄位

@where nvarchar(500),--條件

@orderby nvarchar(500),--排序條件

@pagesize int ,--每頁個數

@pageindex int, --頁數

@tablecount int output--總記錄數

as begin

declare @strsql nvarchar(1000) ,@strcount nvarchar(1000)

declare @str int,@end int

set @str=(@pageindex-1)*@pagesize+1 

set @end=@str+@pagesize-1

set @strcount=n' select @tablecount=count(*) from '+@tabename+' where 1=1'

set @strsql=n' select * from (select row_number() over

(order by '+@orderby+')as rowid,

'+@filename+' from '+@tabename+' where 1=1) as t

where rowid between '+ltrim(str(@str))+' and '+ltrim(str(@end))+' '

if(@where!=null or @where!='')

begin

set @strcount=@strcount+'where'+@where

set @strsql=@strsql+'where'+@where

end

print @tablecount

exec(@strsql)

exec sp_executesql @strcount, n'@tablecount int out',@tablecount output

enddeclare @total int

exec fenye 'logtype','*','','id',2,1,@total output

萬能儲存過程分頁

引數說明 tblname 需要查詢的表名。如圖書表tblbooks 如果是多表 圖書表關聯圖書分類表 則寫成 tblbooks inner join tblbooktypes on tblbooks.bookid tblbooktypes.bookid fldname 主鍵欄位名 bookid li...

SqlServer萬能分頁儲存過程

alter proc sp hangkong table nvarchar 200 表,字段,條件,field nvarchar 2000 欄位 where nvarchar 2000 條件 order nvarchar 200 排序所需要的的 pagesize int,每頁顯示的個數 pagenu...

用儲存過程萬能分頁顯示表資料

create procedure getrecordfrompage tblname varchar 255 表名 fldname varchar 255 欄位名 pagesize int 10,頁尺寸 pageindex int 1,頁碼 iscount bit 0,返回記錄總數,非 0 值則返回...