第一種方法:
declare @pagesize int,@currpage int,
@topnum int,@previous int
select @pagesize = 30
select @currpage = 2
select @topnum = @currpage * @pagesize
select @previous = (@currpage - 1) * @pagesize
declare @i int,@idstr nvarchar(500),@strsql nvarchar(1000)
select @i = 0
select @strsql = n''
select @strsql = @strsql + n' select top '+str(@topnum)+ ' @i = @i + 1 '
select @strsql = @strsql + n', @idstr = '
select @strsql = @strsql + n'case when @i > '+str(@previous)+' then @idstr + ltrim(rtrim(str(orderid))) + '','' '
select @strsql = @strsql + n'else n''''end '
select @strsql = @strsql + n'from orders '
select @strsql = ltrim(rtrim(@strsql)) + n' order by orderid desc '
select @idstr = n''
exec sp_executesql @strsql,n'@i int,@idstr varchar(500) output',@i,@idstr output
if len(rtrim(ltrim(@idstr))) > 0
begin
select @idstr = left(@idstr,len(@idstr)-1)
endselect @strsql = 'select * from orders where orderid in ('+@idstr+')'
exec(@strsql)
第2種方法
create procedure proc_pagination(
@tblname varchar(255), -- 表名
@strgetfields varchar(1000) = '*', -- 需要返回的列
@fldname varchar(255)='', -- 排序的欄位名
@pagesize int = 10, -- 頁尺寸
@pageindex int = 1, -- 頁碼
@docount bit = 0, -- 返回記錄總數, 非 0 值則返回
@ordertype bit = 0, -- 設定排序型別, 非 0 值則降序
@strwhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
) as
set nocount on
declare @strsql varchar(5000) -- 主語句
declare @strtmp varchar(110) -- 臨時變數
declare @strorder varchar(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,就執行降序,這句很重要!
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)
海量資料分頁
language vbscript codepage 936 分頁sql語句生成 function getpagesql tblname,fldname,pagesize,pageindex,ordertype,strwhere dim strtemp,strsql,strorder 根據排序方式生...
海量資料分頁查詢
select top 25 id,registerid,filenameid,createtime from tbfilenamerecord where id select min id from select top 100 id from tbfilenamerecord where regi...
海量資料的分頁怎麼破
分頁應該是極為常見的資料展現方式了,一般在資料集較大而無法在單個頁面中呈現時會採用分頁的方法。各種前端ui元件在實現上也都會支援分頁的功能,而資料互動呈現所相應的後端系統 資料庫都對資料查詢的分頁提供了良好的支援。以幾個流行的資料庫為例 查詢表 t data 第 2 頁的資料 假定每頁 5 條 db...