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 - 常用資料庫分頁SQL資料庫
- 常用3種資料庫的Sql分頁資料庫SQL
- oracle資料庫用sql實現快速分頁Oracle資料庫SQL
- 資料分頁說明
- ASP資料分頁方法
- SQL分頁語句SQL
- 分頁procedure (SQL Server)SQLServer
- Linq to sql 分頁SQL
- oracle 分頁sql 分段查資料和分段求和 sql語句 和java程式碼OracleSQLJava
- 基於Sql server資料庫的四種分頁方式總結SQLServer資料庫
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- 版本12.5.2,分頁取資料的sql怎麼寫?(轉載)SQL
- 分頁按頁碼讀取redis資料Redis
- WebMagic抓取 table分頁資料, table分頁時,URL不變Web
- 重寫 API 資源分頁資料API
- 三種SQL分頁方式SQL
- 千萬級資料深分頁查詢SQL效能最佳化實踐SQL
- 使用陣列建立分頁資料陣列
- easy ui datagrid 資料分頁UI
- python 自定義資料分頁Python
- layui 資料表格重新載入資料分頁器回到第一頁UI
- mybatis動態sql與分頁MyBatisSQL
- SQL 分頁儲存過程SQL儲存過程
- Mysql 分頁效率不同的SQLMySql
- oracle sql分頁查詢(一)OracleSQL
- SQL SERVER分頁演算法SQLServer演算法
- sql儲存過程分頁SQL儲存過程
- SQL Server 資料頁損壞修復SQLServer
- 海量資料的分頁怎麼破?
- PHP 原生操作 Mysql 分頁資料案例PHPMySql
- thinkPHP 分頁後如何處理資料PHP
- 基於MSSQLSQL資料庫大批次資料的分塊分頁查詢SQL資料庫
- 資料分佈決定SQL寫法SQL
- 百億級資料 分庫分表 後怎麼分頁查詢?
- 統計分頁一些sqlSQL
- SQL優化:limit分頁優化SQL優化MIT
- 【專案實戰】---SQL真分頁SQL
- [SQL Server]分頁功能的實現SQLServer