SQL資料分頁
-- 查詢滿足條件的記錄集,並獲取指定頁的資料
CREATE PROCEDURE Proc_QueryPages
@Fieldstr NVARCHAR(255) =' * ', -- 查詢欄位
@Tnamestr NVARCHAR(255) ='', -- 查詢表名
@Wherestr NVARCHAR(255) ='', -- 查詢條件
@Orderby Nvarchar(255) =' order by id desc ', -- 查詢的排序
@PageSize int = 50, -- 頁尺寸
@PageIndex int =1, -- 頁碼
@mode int =1, --返回模式1為資料集,0為資料總數和總頁數
@Pagemode int =1, --是否分頁,1為分頁,0表示不分頁
@CountRs int = 1 output, ----查詢到的記錄數
@Countpages int = 1 output ----查詢結果總頁數
AS
declare @SQLstr Nvarchar(4000)
declare @Wheretemp1 Nvarchar(1000)
declare @Orderfield1 Nvarchar(1000)
declare @OrderTmp1 Nvarchar(1000)
declare @Orderby1 Nvarchar(1000)
if @mode != 0 --判斷結果是統計記錄數還是返回資料集,非零返回資料集
BEGIN
if @Pagemode=1 --"1"為分頁
begin
if @PageIndex=1
if @Wherestr=''
set @SQLstr='select top '+ltrim(str(@PageIndex*@PageSize)) +' '+ @Fieldstr + ' from '+ @Tnamestr +' '+@Orderby
else
set @SQLstr='select top '+ltrim(str(@PageIndex*@PageSize)) +' '+ @Fieldstr + ' from '+ @Tnamestr +' where '+ @Wherestr+' '+@Orderby
--以上程式碼是查詢第一頁的,這樣可以加速查詢
else
IF charindex(',',@Orderby)>0
Begin
set @SQLstr='SELECT TOP '+ltrim(str(@PageSize))+' '+@Fieldstr
+' FROM ' + @Tnamestr + ' WHERE (ID NOT IN (SELECT id FROM (SELECT top '+ltrim(str((@PageIndex-1)*@PageSize))
+' * FROM ' + @Tnamestr +@Orderby+') AS t)) '+@Orderby
End
ELSE
Begin
set @Orderfield1=replace(replace(replace(@Orderby,'order by',''),'desc',''),'asc','')
----設定排序的條件字串
if charindex('desc', @Orderby)>0
set @Wheretemp1=' where '+@Orderfield1+'<(select min('+@Orderfield1+') from (select top '
else
set @Wheretemp1=' where '+@Orderfield1+'>(select max('+@Orderfield1+') from (select top '
if @Wherestr=''
set @SQLstr='select top '+ltrim(str(@PageSize))+' '+@Fieldstr
+' from '+@Tnamestr+' '+@wheretemp1
+ltrim(str((@PageIndex-1)*@PageSize))
+' '+@Orderfield1+' from '+@Tnamestr+' '+@Orderby+') as T ) '+@Orderby
ELSE
set @SQLstr='select top '+ltrim(str(@PageSize))+' '+@Fieldstr
+' from '+@Tnamestr+' '+@wheretemp1
+ltrim(str((@PageIndex-1)*@PageSize))
+' '+@Orderfield1+' from '+@Tnamestr+' where '+@Wherestr+' '+@Orderby+') as T ) AND '
+@Wherestr+' '+@Orderby
End
end
else --不分頁模式程式碼開始
begin
if @Wherestr=''
set @SQLstr='select ' + @Fieldstr + ' from '+ @Tnamestr +' '+@Orderby
else
set @SQLstr='select ' + @Fieldstr + ' from '+ @Tnamestr +' where '+ @Wherestr+' '+@Orderby
end
exec(@SQLstr)-- 執行查詢
--print @SQLstr
END
else --返回記錄數和總頁數程式碼開始
BEGIN
if @Wherestr=''
set @SQLstr = 'select @CountRs=count(*) from ' + @Tnamestr
Else
set @SQLstr = 'select @CountRs=count(*) from ' + @Tnamestr +' where '+ @Wherestr
exec sp_executesql @SQLstr,N'@CountRs int out ',@CountRs out
if @CountRs<=@PageSize
set @Countpages=1
else
begin
set @Countpages=cast(@CountRs/@PageSize as int)
if (@CountPages * @PageSize != @CountRs)
set @Countpages=@CountRs/@PageSize+1
end
--print @CountRs
--print @Countpages
END
GO
CREATE PROCEDURE Proc_QueryPages
@Fieldstr NVARCHAR(255) =' * ', -- 查詢欄位
@Tnamestr NVARCHAR(255) ='', -- 查詢表名
@Wherestr NVARCHAR(255) ='', -- 查詢條件
@Orderby Nvarchar(255) =' order by id desc ', -- 查詢的排序
@PageSize int = 50, -- 頁尺寸
@PageIndex int =1, -- 頁碼
@mode int =1, --返回模式1為資料集,0為資料總數和總頁數
@Pagemode int =1, --是否分頁,1為分頁,0表示不分頁
@CountRs int = 1 output, ----查詢到的記錄數
@Countpages int = 1 output ----查詢結果總頁數
AS
declare @SQLstr Nvarchar(4000)
declare @Wheretemp1 Nvarchar(1000)
declare @Orderfield1 Nvarchar(1000)
declare @OrderTmp1 Nvarchar(1000)
declare @Orderby1 Nvarchar(1000)
if @mode != 0 --判斷結果是統計記錄數還是返回資料集,非零返回資料集
BEGIN
if @Pagemode=1 --"1"為分頁
begin
if @PageIndex=1
if @Wherestr=''
set @SQLstr='select top '+ltrim(str(@PageIndex*@PageSize)) +' '+ @Fieldstr + ' from '+ @Tnamestr +' '+@Orderby
else
set @SQLstr='select top '+ltrim(str(@PageIndex*@PageSize)) +' '+ @Fieldstr + ' from '+ @Tnamestr +' where '+ @Wherestr+' '+@Orderby
--以上程式碼是查詢第一頁的,這樣可以加速查詢
else
IF charindex(',',@Orderby)>0
Begin
set @SQLstr='SELECT TOP '+ltrim(str(@PageSize))+' '+@Fieldstr
+' FROM ' + @Tnamestr + ' WHERE (ID NOT IN (SELECT id FROM (SELECT top '+ltrim(str((@PageIndex-1)*@PageSize))
+' * FROM ' + @Tnamestr +@Orderby+') AS t)) '+@Orderby
End
ELSE
Begin
set @Orderfield1=replace(replace(replace(@Orderby,'order by',''),'desc',''),'asc','')
----設定排序的條件字串
if charindex('desc', @Orderby)>0
set @Wheretemp1=' where '+@Orderfield1+'<(select min('+@Orderfield1+') from (select top '
else
set @Wheretemp1=' where '+@Orderfield1+'>(select max('+@Orderfield1+') from (select top '
if @Wherestr=''
set @SQLstr='select top '+ltrim(str(@PageSize))+' '+@Fieldstr
+' from '+@Tnamestr+' '+@wheretemp1
+ltrim(str((@PageIndex-1)*@PageSize))
+' '+@Orderfield1+' from '+@Tnamestr+' '+@Orderby+') as T ) '+@Orderby
ELSE
set @SQLstr='select top '+ltrim(str(@PageSize))+' '+@Fieldstr
+' from '+@Tnamestr+' '+@wheretemp1
+ltrim(str((@PageIndex-1)*@PageSize))
+' '+@Orderfield1+' from '+@Tnamestr+' where '+@Wherestr+' '+@Orderby+') as T ) AND '
+@Wherestr+' '+@Orderby
End
end
else --不分頁模式程式碼開始
begin
if @Wherestr=''
set @SQLstr='select ' + @Fieldstr + ' from '+ @Tnamestr +' '+@Orderby
else
set @SQLstr='select ' + @Fieldstr + ' from '+ @Tnamestr +' where '+ @Wherestr+' '+@Orderby
end
exec(@SQLstr)-- 執行查詢
--print @SQLstr
END
else --返回記錄數和總頁數程式碼開始
BEGIN
if @Wherestr=''
set @SQLstr = 'select @CountRs=count(*) from ' + @Tnamestr
Else
set @SQLstr = 'select @CountRs=count(*) from ' + @Tnamestr +' where '+ @Wherestr
exec sp_executesql @SQLstr,N'@CountRs int out ',@CountRs out
if @CountRs<=@PageSize
set @Countpages=1
else
begin
set @Countpages=cast(@CountRs/@PageSize as int)
if (@CountPages * @PageSize != @CountRs)
set @Countpages=@CountRs/@PageSize+1
end
--print @CountRs
--print @Countpages
END
GO
相關文章
- 基於Sql server資料庫的四種分頁方式總結SQLServer資料庫
- 資料分頁說明
- 千萬級資料深分頁查詢SQL效能最佳化實踐SQL
- python 自定義資料分頁Python
- SQL 分頁儲存過程SQL儲存過程
- mybatis動態sql與分頁MyBatisSQL
- SQL Server 資料頁損壞修復SQLServer
- WebMagic抓取 table分頁資料, table分頁時,URL不變Web
- 重寫 API 資源分頁資料API
- 使用陣列建立分頁資料陣列
- layui 資料表格重新載入資料分頁器回到第一頁UI
- 統計分頁一些sqlSQL
- 動態SQL-條件分頁SQL
- thinkPHP 分頁後如何處理資料PHP
- 海量資料的分頁怎麼破?
- PHP 原生操作 Mysql 分頁資料案例PHPMySql
- MySql/Oracle和SQL Server的分頁查MySqlOracleServer
- List分頁(SQL引數化2100個 )SQL
- SQL Server 怎麼在分頁獲取資料的同時獲取到總記錄數SQLServer
- 百億級資料 分庫分表 後怎麼分頁查詢?
- 百億級資料分表後怎麼分頁查詢?
- 資料庫系列:巨量資料表的分頁效能問題資料庫
- 大量資料如何做分頁處理
- python實現資料分頁小練習Python
- 19 ##### 屬性方法案例-資料分頁
- Oracle資料庫中的分頁查詢Oracle資料庫
- 在分頁物件資料上追加屬性物件
- 整理SQL SERVER資料頁checksum校驗演算法SQLServer演算法
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- MySQL資料庫中SQL語句分幾類?MySql資料庫
- Lavarel Ajax 分頁時 獲取分頁資訊
- SQL Server在分頁獲取資料的同時獲取到總記錄數的兩種方法SQLServer
- thinkphp5 分頁資料物件的處理PHP物件
- MySQL order by limit 分頁資料重複問題MySqlMIT
- elasticsearch查詢之大資料集分頁效能分析Elasticsearch大資料
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- .net中使用oracle資料庫分頁小技巧Oracle資料庫
- 一次SQL調優 聊一聊 SQLSERVER 資料頁SQLServer
- SQL 搜尋方法或鍵集分頁 - Vlad MihalceaSQL