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...