高效分頁sql儲存過程
CREATE proc newgetpage
(--預設分頁主鍵為id
@tblName nvarchar(128), --表名稱列表
@PageSize int=10, --頁尺寸
@PageIndex int=1, --當前頁
@fields nvarchar(4000)='*', --查詢欄位列表
@fldname nvarchar(50), --主鍵欄位名
@fldorder bit=1, --主鍵排序方式,0asc,非零desc
@FirstfldName nvarchar(50)='', --主排序欄位名,非主鍵,有重複值
@FirstfldOrder bit=1, --主欄位排序方式
@SecondfldName nvarchar(50)='', --副排序欄位名,非主鍵,有重複值
@SecondfldOrder bit=1, --副欄位排序方式
@strWhere nvarchar(1000)='', --查詢條件
@Iscount bit=0 --返回記錄總數,非0則返回
)
as
declare @strsql nvarchar(4000) --主語句
declare @strtmp nvarchar(500) --臨時變數
declare @strorder nvarchar(500) --總排序方式
declare @stropporder nvarchar(500) --總排序的反方式
declare @strorderfldlist nvarchar(500) --所有要排序的欄位序列
declare @selectfld nvarchar(500) --選擇主鍵page
declare @selectfirst nvarchar(500) --選擇主排序page
declare @selectsecond nvarchar(500) --選擇副排序page
/**/
declare @strwheretmp nvarchar(500) --臨時where變數
if @strwhere!=''
set @strwheretmp=' where '
else
set @strwheretmp=''
/**/
set @strsql=''
set @strtmp=''
set @strorder=''
set @stropporder=''
set @strorderfldlist=''
set @selectfld=''
set @selectfirst=''
set @selectsecond=''
if @pagesize<1
set @pagesize=10
if @pageindex<1
set @pageindex=1
if @fields=''
set @fields='*'
if @FirstfldName=''
set @FirstfldName=''
if @SecondfldName=''
set @SecondfldName=''
--------------------------------bengin
----------總排序方式
if @fldorder!=0
begin
-----正排序
set @[email protected] + ' desc '
if @secondfldname!=''
if @secondfldorder!=0
set @[email protected] + ' desc,'[email protected]
else
set @[email protected] + ' asc,'[email protected]
if @firstfldname!=''
if @firstfldorder!=0
set @[email protected] + ' desc,'[email protected]
else
set @[email protected] + ' asc,'[email protected]
-----反排序
set @[email protected] + ' asc '
if @secondfldname!=''
if @secondfldorder!=0
set @[email protected]
else
set @[email protected] + ' desc,'[email protected]
if @firstfldname!=''
if @firstfldorder!=0
set @[email protected] + ' asc,'[email protected]
else
set @[email protected] + ' desc,'[email protected]
end
else
begin
-----正排序
set @[email protected] + ' asc '
if @secondfldname!=''
if @secondfldorder!=0
set @[email protected] + ' desc,'[email protected]
else
set @[email protected] + ' asc,'[email protected]
if @firstfldname!=''
if @firstfldorder!=0
set @[email protected] + ' desc,'[email protected]
else
set @[email protected] + ' asc,'[email protected]
-----反排序
set @[email protected] + ' desc '
if @secondfldname!=''
if @secondfldorder!=0
set @[email protected] + ' desc,'[email protected]
else
set @[email protected] + ' asc,'[email protected]
if @firstfldname!=''
if @firstfldorder!=0
set @[email protected] + ' desc,'[email protected]
else
set @[email protected] + ' asc,'[email protected]
end
set @stropporder=' order by '[email protected]
set @strorder=' order by '[email protected] +' '
---------總排序方式end
---------總排序欄位序列
set @strorderfldlist='id'
if @firstfldname!=''
begin
set @[email protected]+','[email protected]
if @secondfldname!=''
set @[email protected]+','[email protected]
end
---------總排序欄位序列end
if @Firstfldname!=''
-------若主排序欄位不空,則按主排序欄位排序,
begin
if @fldorder!=0
set @strTmp = '<=(select top 1'
else
set @strTmp = '>=(select top 1'
set @[email protected] + replace(@strtmp,'=','')+'('[email protected]+')from(select top ' + str((@PageIndex-1)*@PageSize)
+ ' '[email protected] +' from '[email protected]+' '[email protected][email protected] [email protected]
+')as tbltmp '+ @stropporder +')'
if @firstfldname!=''
set @selectfirst=' and '[email protected] + @strtmp+'('[email protected]+')from(select top ' + str((@PageIndex-1)*@PageSize)
+ ' '[email protected] +' from '[email protected]+' '[email protected][email protected] [email protected]
+')as tbltmp '+ @stropporder +')'
if @secondfldname!=''
set @selectsecond=' and '[email protected] + @strtmp+'('[email protected]+')from(select top ' + str((@PageIndex-1)*@PageSize)
+ ' '[email protected] +' from '[email protected]+' '[email protected][email protected] [email protected]
+')as tbltmp '+ @stropporder +')'
------------多欄位排序程式碼
set @strSQL = 'select top ' + str(@PageSize) + ' '[email protected]+' from '
+ @tblName + ' where ' + @selectfld + @selectfirst+ @selectsecond+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' '[email protected]+' from '
+ @tblName + ' where ' + @selectfld + @selectfirst+ @selectsecond+' and ' + @strWhere + ' ' + @strOrder
------------多欄位排序程式碼end
end
-------若主排序欄位不空,則按主排序欄位排序,end
else
-------若主排序欄位為空,則按主鍵排序,
begin
if charindex('.',@fldname)>0
set @selectfld=substring(@fldname,charindex('.',@fldname)+1,len(@fldname))
else
set @[email protected]
if @fldorder!=0
begin
set @strTmp = '<(select top 1'
set @strOrder = ' order by ' + @fldName +' desc'
set @stropporder=' order by '[email protected] +' asc'
end
else
begin
set @strTmp = '>(select top 1'
set @strOrder = ' order by ' + @fldName +' asc'
set @stropporder=' order by '[email protected] +' desc '
end
set @strSQL = 'select top ' + str(@PageSize) + ' '[email protected]+' from '
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
+ @selectfld + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp '[email protected] +')'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' '[email protected]+' from '
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
+ @selectfld + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp '[email protected] +') and ' + @strWhere + ' ' + @strOrder
end
-------若主排序欄位為空,則按主鍵排序,end
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere
set @strSQL = 'select top ' + str(@PageSize) + ' '[email protected]+' from '
+ @tblName + '' + @strTmp + ' ' + @strOrder
end
if @IsCount != 0
begin
set @strSQL = 'select count(*) as Total from ' + @tblName + ''
if @strWhere!=''
set @strSQL='select count(*) as Total from '[email protected] +' where ' [email protected]
end
--print @strsql
exec (@strSQL)
GO
相關推薦
高效分頁sql儲存過程
CREATE proc newgetpage (--預設分頁主鍵為id @tblName nvarchar(128), --表名稱列表 @PageSize int=10, --頁尺寸 @PageIndex int=1, --當前頁 @fields
分頁查詢儲存過程sql語句
--建立分頁的儲存過程 alter procedure proc_page @tabName varchar(50), @pageIndex int=1, @pageSize int=5, @pk varchar(20)='id', @cols varchar(200)
SQL 分割字串和通用分頁查詢儲存過程
USE [sg] --使用某個資料庫 GO /****** Object: StoredProcedure [dbo].[findTableIndex] Script Date: 2017/4/1 17:02:58 ******/ SET ANSI_NULLS
Oracle學習筆記 -分頁,儲存過程,自增
Oracled 的欄位自增,查詢,遊標的返回,儲存過程。 1,自增(觸發器) //還有一個條件需要增加一個佇列 create or replace TRIGGER MYSYSTEM.CBOUNCEID BEFORE INSERT ON MYSYSTEM.BOUNCERECORD
MSSQL的分頁查詢儲存過程
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go --分頁儲存過程 CREATE PROCEDURE [dbo].[sp_Paging] ( @Tables nvarchar(1000),
SQLSERVER分頁通用儲存過程
USE [DataBase] GO /****** Object: StoredProcedure [dbo].[CommonPagenation] Script Date: 06/28/2016 10:41:58 ******/ SET ANSI_NULLS ON GO
MySQL資料庫分頁的儲存過程
MySQL的的的的分頁通用的儲存過程可以先寫出這幾行程式碼:SET @ 變數名 = CONCAT('select * from person limit',((1-1)* 5),',',5,''); FROM @變數名;EXECUTE a;當你發現在你的資料庫儲存過程資料夾有
SQL儲存過程中分頁
</pre><pre name="code" class="sql">ALTER proc [dbo].[GetGoodsLsit] ----分頁條件 @StartIndex varchar(20), @PageSize varchar(20), ----排序條件
SQL儲存過程分頁與遊標使用
儲存過程: CREATE procedure p_splitpage @sql nvarchar(4000), --要執行的sql語句 @page int=1, --要顯示的頁碼 @pageSize int,&n
SQL儲存過程之分頁用法
create procedure [dbo].[psys_Paging]@sql text, --要執行的sql語句@page int, --要顯示的頁碼@pageSize int, --每頁的大小@pageCount int=0 out, --總頁數@recordCount int=0 out -
Oracle 高效分頁儲存過程例項 含javademo
關於分頁,想必是每一程式猿都會遇到的問題,解決辦法有很多, 接下來就讓我們嘗試下 oracle 儲存過程實現,直接在資料庫層面實現,重點在於高效 1首先建立 儲存過程用的包,以及宣告儲存過程 --建立包 -- Author : Sugar -- Created
簡單的SQL儲存過程分頁
USE [testActice] GO /****** Object: StoredProcedure [dbo].[getpagelist] Script Date: 06/12/2017 1
sql server分頁存儲過程
order span exe 存儲 數據 reat 過大 where 排序類 因項目需要,一次性查詢出來的數據過大,內存hold不住,所以特意寫成分頁查詢,減小占用內存。 存儲過程如下: USE [XXX] GO SET ANSI_NULLS ON GO SET QU
MS SQL 分頁存儲過程
bsp RF class 自己 mon max sql rec none 最近換了家新公司,但是新公司沒有使用分頁的存儲過程。哎~~,硬著頭皮自己嘗試寫了一個,別說還挺好用的。(效率怎麽樣就不怎麽清除沒有詳細的測試過) CREATE PROCEDURE [dbo].[
MSSQLServer資料庫大量資料按月份分表、儲存過程指定時間段跨表分頁查詢
比較完善的大量資料分表功能程式碼,包含建立資料庫、生成資料、測試結果。適合初學分表者使用。 資料按照每個月建立一個數據表,通過儲存過程輸入引數,按照指定日期跨表查詢資料,並且可以分頁查詢。 有如下表: table_20180101table_20180201 table_
SQL 高效分頁(百萬條資料)ROW_NUMBER() OVER (ORDER BY id) | 分頁
第一種方法:效率最高 SELECT TOP 頁大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,
My Sql 高效分頁
/* *普通分頁 *在資料檔案上偏移1000000查出10條 */ select * from zoldesk_92game_net_ecms_bj where classid=303 ORDER BY id ASC LIMIT 1000000,10 ; /*
Delphi調用SQL分頁存儲過程實例
char sele des 高度 nbsp dna procedure one 變量 Delphi調用SQL分頁存儲過程實例 (2008-11-18 17:12:35)轉載▼ 標簽: it 分類: Delphi相關 //-----下面是一個支持任意表的 SQL SE
SQL儲存過程——求每小時的99分位數
第二篇部落格,想分享一下在實習工作中一個SQL的儲存過程。在寫這個儲存過程的時候,查閱了各大百度,貼吧,部落格上的資料,但是均是沒有找到99分位數的寫法。可能是這個的應用場景較少吧。但是也希望會對一些童鞋有幫助。 99分位數的邏輯想必大家都清楚,總共三步:
SQL 高效分頁(百萬條資料)
ROW_NUMBER() OVER (ORDER BY id) | 分頁 SELECT TOP 頁大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER