create procedure [dbo].[proc_pagination]
@keyname varchar(255),
@tblname varchar(255),
@strgetfields varchar(1000) = '*',
@pagesize int = 10,
@pageindex int = 1,
@pagecount int = 1 output,
@datacount decimal = 1 output,
@sortname varchar(255)='',
@sorttype varchar(255) = 'asc',
@searchcondition varchar(1500) = ''
as declare @strsql nvarchar(4000)
declare @strtmp varchar(110)
declare @strorder varchar(400)
declare @seaorder varchar(400)
begin
if @searchcondition !=''
set @strsql = 'select @datacount=count(*) from [' + @tblname + '] where '+@searchcondition
else
set @strsql = 'select @datacount=count(*) from [' + @tblname + ']'
exec sp_executesql @strsql,n'@datacount int out ',@datacount out
set @pagecount=(@datacount+@pagesize-1)/@pagesize
if @pageindex>@pagecount
set @pageindex=@pagecount
endif @sortname!=''
begin
if @sorttype = 'desc'
begin
set @strorder = ' order by [' + @sortname +'] desc'
if @pageindex*2<@pagecount
set @seaorder = ' order by [' + @sortname +'] desc'
else
set @seaorder = ' order by [' + @sortname +'] asc'
endelse
begin
set @strorder = ' order by [' + @sortname +'] asc'
if @pageindex*2<@pagecount
set @seaorder = ' order by [' + @sortname +'] asc'
else
set @seaorder = ' order by [' + @sortname +'] desc'
endif @pageindex = 1
begin
if @searchcondition != ''
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where ' + @searchcondition + ' ' + @strorder
else
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ['+ @tblname + '] '+ @strorder
endelse
begin
if @pageindex*2<@pagecount
if @searchcondition = ''
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where [' + @keyname + '] not in(select ['+ @keyname + '] from (select top ' + str((@pageindex-1)*@pagesize) + ' ['+ @keyname + '] from [' + @tblname + ']' + @seaorder + ') as tbltmp)'+ @strorder
else
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where [' + @keyname + '] not in(select [' + @keyname + '] from (select top ' + str((@pageindex-1)*@pagesize) + ' [' + @keyname + '] from [' + @tblname + '] where ' + @searchcondition + ' ' + @seaorder + ') as tbltmp) and ' + @searchcondition + ' ' + @strorder
else
if @searchcondition = ''
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where [' + @keyname + '] in(select ['+ @keyname + '] from (select top ' + str(@datacount-(@pageindex-1)*@pagesize) + ' ['+ @keyname + '] from [' + @tblname + ']' + @seaorder + ') as tbltmp)'+ @strorder
else
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where [' + @keyname + '] in(select [' + @keyname + '] from (select top ' + str(@datacount-(@pageindex-1)*@pagesize) + ' [' + @keyname + '] from [' + @tblname + '] where ' + @searchcondition + ' ' + @seaorder + ') as tbltmp) and ' + @searchcondition + ' ' + @strorder
endend
else
begin
if @pageindex = 1
begin
if @searchcondition != ''
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where ' + @searchcondition
else
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ['+ @tblname + ']'
endelse
begin
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ['
+ @tblname + '] where [' + @keyname + '] >(select max(['+ @keyname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['+ @keyname + '] from [' + @tblname + '] order by ' + @keyname + ') as tbltmp)'
if @searchcondition != ''
set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where [' + @keyname + '] >(select max([' + @keyname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' [' + @keyname + '] from [' + @tblname + '] where ' + @searchcondition + ' order by ' + @keyname + ') as tbltmp) and ' + @searchcondition
endend
exec sp_executesql @strsql
海量資料排序
海量資料排序 2011 04 12 19 33 1億資料找出最大的1w個 1.分塊法 解法 a.採用分塊法,將1億資料分成100w一塊,共100塊。b.對每塊進行快速排序,分成兩堆,如果大堆大於1w個,則對大堆再次進行快速排序,直到小於等於1w停止 假設此時大堆有n個 此時對小堆進行排序,取最大的1...
海量資料排序
今天要給100億個數字排序,100億個 int 型數字放在檔案裡面大概有 37.2gb,非常大,記憶體一次裝不下了。那麼肯定是要拆分成小的檔案乙個乙個來處理,最終在合併成乙個排好序的大檔案。實現思路 1.把這個37gb的大檔案,用雜湊分成1000個小檔案,每個小檔案平均38mb左右 理想情況 把10...
海量資料排序演算法
題目 有100萬無序資料,要求從小到大排序。但是每次記憶體只能排序1萬條資料。1.因為每次只能處理1萬條資料,所以要分組處理,我們將100萬資料分成100組 2.因為每組資料都是無序的,所以我們使用平均時間複雜度較好的演算法。3.當我們分組排序完成後,我們要排序1萬條資料就會簡單很多了。我們一共要取...