資料分頁 儲存過程

2021-05-22 06:03:27 字數 2753 閱讀 9267

if exists(select * from sys.objects where [name] = 'pagination')

drop procedure pagination

gocreate procedure pagination  

@tblname nvarchar(255),-- 表名  

@strgetfields nvarchar(1000) = '*',-- 需要返回的列  

@fldname nvarchar(255)='',-- 排序的欄位名  

@pagesize int = 10,-- 頁尺寸  

@pageindex int = 1,-- 頁碼  

@docount bit = 0,-- 返回記錄總數, 非 0 值則返回  

@ordertype bit = 0,-- 設定排序型別, 非 0 值則降序  

@strwhere nvarchar(1500) = '' -- 查詢條件 (注意: 不要加 where)  

as  

declare @strsql nvarchar(4000)-- 主語句  

declare @strtmp nvarchar(110)-- 臨時變數  

declare @strorder nvarchar(400)-- 排序型別  

if @docount != 0  

begin  

if @strwhere !=''  

set @strsql = 'select count(*) as total from ['+ @tblname +'] where '+ @strwhere  

else  

set @strsql = 'select count(*) as total from ['+ @tblname +']'

end  

--以上**的意思是如果@docount傳遞過來的不是0,就執行總數統計。

--以下的所有**都是@docount為0的情況  

else

begin  

if @ordertype != 0  

begin  

set @strtmp = '<(select min'  

set @strorder = ' order by ['+ @fldname +'] desc'

--如果@ordertype不是0,就執行降序,這句很重要!  

end  

else  

begin  

set @strtmp = '>(select max'

set @strorder = ' order by ['+ @fldname +'] asc'

end  

if @pageindex = 1  

begin

if @strwhere != ''    

set @strsql = 'select top ' + str(@pagesize) +' [email=[ft=,2,]'+@strgetfields]'+@strgetfields[/email]

+ '  from ['+ @tblname +'] where ' + @strwhere + ' ' + @strorder  

else  

set @strsql = 'select top ' + str(@pagesize) +' [email=[ft=,2,]'+@strgetfields]'+@strgetfields[/email]

+ '  from ['+ @tblname +'] '+ @strorder  

--如果是第一頁就執行以上**,這樣會加快執行速度  

end  

else  

begin  

--以下**賦予了@strsql以真正執行的sql**  

set @strsql = 'select top ' + str(@pagesize) +' [email=[ft=,2,]'+@strgetfields]'+@strgetfields[/email]

+ '  from [' + @tblname +'] where [' + @fldname + ']' + @strtmp +

'(['+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['+ @fldname + '] from ['+ @tblname +']' + @strorder + ') as tbltmp)'+ @strorder  

if @strwhere != ''  

set @strsql = 'select top ' + str(@pagesize) +' [email=[ft=,2,]'+@strgetfields]'+@strgetfields[/email]

+ '  from ['+ @tblname +'] where [' + @fldname + ']' + @strtmp +

'(['+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['+ @fldname + ']  

from ['+ @tblname +'] where ' + @strwhere + ' ' + @strorder + ') as tbltmp) and ' + @strwhere + ' ' + @strorder  

end  

end    

exec ( @strsql)

go

資料分頁 儲存過程

if exists select from sys.objects where name pagination drop procedure pagination gocreate procedure pagination tblname nvarchar 255 表名 strgetfields n...

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

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

大量資料分頁儲存過程

create procedure pagination3 tables varchar 1000 表名稱,檢視 primarykey varchar 100 主關鍵字 sort varchar 200 bookid desc 排序語句,不帶order by 比如 newsid desc,orderr...