分頁儲存過程

2021-04-12 14:24:49 字數 2745 閱讀 8054

create      proc p_sobigo_percentpage

(@tblname   varchar(255)='t_category',             -- 表名

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

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

@pagesize   int=10,                 -- 頁尺寸

@pageindex  int=1,               -- 頁碼

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

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

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

)      

asdeclare @strsql   varchar(5000)       -- 主語句

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

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

--set @tblname='price'

--set @strgetfields='*'--'m_price'+','+'i_merchandiseid'

--set @fldname='d_updatetime'

--set @pagesize=1

--set @pageindex=1

--set @docount=0

--set @ordertype=1

--set @strwhere='i_merchandiseid>10'

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,就執行降序,這句很重要!

endelse

begin

set @strtmp = '>(select max'

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

endif @pageindex = 1

begin

if @strwhere != ''  

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ '  from [' + @tblname + '] where ' + @strwhere + ' ' + @strorder

else

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ '  from ['+ @tblname + '] '+ @strorder

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

endelse

begin

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

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ '  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) +' '+@strgetfields+ '  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)

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

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

儲存過程分頁

create database test onprimary name test data.mdf filename d 我的資料 sql 備份 test data.mdf logon name test data.ldf filename d 我的資料 sql 備份 test data.ldf i...

分頁儲存過程

建立測試表 if object id tb is not null drop table tb gocreate table tb col nvarchar 10 填充資料 insert tb select top 26 col1 char 64 row number over order by g...

分頁儲存過程

在專案中,我們經常遇到或用到分頁,那麼在大資料量 百萬級以上 下,哪種分頁演算法效率最優呢?我們不妨用事實說話。測試環境 硬體 cpu 酷睿雙核t5750 記憶體 2g 軟體 windows server 2003 sql server 2005 ok,我們首先建立一資料庫 data test,並在...

儲存過程分頁

create database test on primary name test data.mdf filename d 我的資料 sql 備份 test data.mdf log on name test data.ldf filename d 我的資料 sql 備份 test data.ldf...