从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程
生活随笔
收集整理的這篇文章主要介紹了
从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通用分頁存儲(chǔ)過程很實(shí)用,但畢竟不是全適用于一些環(huán)境,譬如我遇到過一種情況,需要先外鏈兩個(gè)表,然后再關(guān)聯(lián)幾個(gè)表,總之參數(shù)傳遞很煩人,這里不細(xì)說了,現(xiàn)在只談實(shí)現(xiàn)查詢后,怎么分頁的簡單技巧
1,建立用戶函數(shù)
CREATE?? function?? F_xxxx(@ID? nvarchar(36),@Key nvarchar(36),......)
{
......//這里查詢出你需要分頁的所有數(shù)據(jù),可以帶參數(shù)來查詢
}
建函數(shù)的目的是為了整合查詢的數(shù)據(jù),主要是可以帶入?yún)?shù),很方便.
注,函數(shù)中沒有exec語句,不可以拼接SQL,不過可以調(diào)用存儲(chǔ)過程.
2,建分頁存儲(chǔ)過程,具體框架和說明如下
/**//*080520??by?zjyaoo@live.cn*/??
CREATE?PROCEDURE?dbo.SPCustomPaging
????(
????@PageSize?int?=15,?--頁面大小
????@PageNumber?int?=1,?--頁碼
????@傳入到函數(shù)的參數(shù)1?nvarchar(36),?--傳入到函數(shù)的參數(shù),這里參數(shù)個(gè)數(shù)根據(jù)建的函數(shù)來決定
????@傳入到函數(shù)的參數(shù)2?nvarchar(36),?--傳入到函數(shù)的參數(shù),這里參數(shù)個(gè)數(shù)根據(jù)建的函數(shù)來決定
????@StrWhere?nvarchar(2000)='?AND?1=1'?,?--條件,注:傳入的@StrWhere需要replace.(''','''')處理
????@RecordCount?int?=0??output??--返回總的條數(shù)
????)
AS
DECLARE?@strStartRow?int
IF?@PageNumber?<?1
????SET?@PageNumber?=?1
SET?@strStartRow?=(@PageNumber?-?1)*?@PageSize?+?1??--設(shè)置其實(shí)頁碼
----
DECLARE?@str_Count_SQL?nvarchar(500)?
SET?@str_Count_SQL=?'SELECT?@TotalCount=count(*)?FROM??[F_建立的的函數(shù)]('''+@函數(shù)參數(shù)1+''','''+@函數(shù)參數(shù)2+''')?Where?1=1?'??+?@StrWhere??--1=1,用于外接條件
EXEC?sp_executesql?@str_Count_SQL,N'@TotalCount?int=0?output',@RecordCount?output??--獲取總的條數(shù)
Declare?@Sql?nvarchar(1000)
set?@Sql?=
'DECLARE??@SortColumn??nvarchar(255)??--建幾個(gè)臨時(shí)變量
DECLARE??@SortNullValue??nvarchar(255)?
DECLARE??@PKStartValue??nvarchar(255)??
SET?@SortNullValue?=?CAST(''''?as?int)
SET?ROWCOUNT??'+??cast(@strStartRow???as??nvarchar(5))??+'???--整數(shù)轉(zhuǎn)為字符
SELECT?@SortColumn=?isNull([函數(shù)中的分類字段]?,@SortNullValue),?@PKStartValue?=?[函數(shù)中的關(guān)鍵字段]????FROM???[F_建立的的函數(shù)]('''+@函數(shù)參數(shù)1+''','''+@函數(shù)參數(shù)2+''')???Where?1=1???'+@StrWhere?+'??ORDER?BY?[函數(shù)中的分類字段],?[再加個(gè)函數(shù)中的關(guān)鍵字段]?Desc?
SET?ROWCOUNT???'+?cast(@PageSize???as??nvarchar(5))?+'????--整數(shù)轉(zhuǎn)為字符
SELECT?*?FROM??F_ManufacturerDiscount('''+@OrgID+''')?
?WHERE??(isNull([函數(shù)中的分類字段],@SortNullValue)>@SortColumn?or?(isNull([函數(shù)中的分類字段],@SortNullValue)=@SortColumn?and?[函數(shù)中的關(guān)鍵字段]<=@PKStartValue))??'+@StrWhere?+'??ORDER?BY?[函數(shù)中的分類字段],[函數(shù)中的關(guān)鍵字段]?Desc
RETURN'
Exec?(@Sql)
GO
1,建立用戶函數(shù)
CREATE?? function?? F_xxxx(@ID? nvarchar(36),@Key nvarchar(36),......)
{
......//這里查詢出你需要分頁的所有數(shù)據(jù),可以帶參數(shù)來查詢
}
建函數(shù)的目的是為了整合查詢的數(shù)據(jù),主要是可以帶入?yún)?shù),很方便.
注,函數(shù)中沒有exec語句,不可以拼接SQL,不過可以調(diào)用存儲(chǔ)過程.
2,建分頁存儲(chǔ)過程,具體框架和說明如下
/**//*080520??by?zjyaoo@live.cn*/??
CREATE?PROCEDURE?dbo.SPCustomPaging
????(
????@PageSize?int?=15,?--頁面大小
????@PageNumber?int?=1,?--頁碼
????@傳入到函數(shù)的參數(shù)1?nvarchar(36),?--傳入到函數(shù)的參數(shù),這里參數(shù)個(gè)數(shù)根據(jù)建的函數(shù)來決定
????@傳入到函數(shù)的參數(shù)2?nvarchar(36),?--傳入到函數(shù)的參數(shù),這里參數(shù)個(gè)數(shù)根據(jù)建的函數(shù)來決定
????@StrWhere?nvarchar(2000)='?AND?1=1'?,?--條件,注:傳入的@StrWhere需要replace.(''','''')處理
????@RecordCount?int?=0??output??--返回總的條數(shù)
????)
AS
DECLARE?@strStartRow?int
IF?@PageNumber?<?1
????SET?@PageNumber?=?1
SET?@strStartRow?=(@PageNumber?-?1)*?@PageSize?+?1??--設(shè)置其實(shí)頁碼
----
DECLARE?@str_Count_SQL?nvarchar(500)?
SET?@str_Count_SQL=?'SELECT?@TotalCount=count(*)?FROM??[F_建立的的函數(shù)]('''+@函數(shù)參數(shù)1+''','''+@函數(shù)參數(shù)2+''')?Where?1=1?'??+?@StrWhere??--1=1,用于外接條件
EXEC?sp_executesql?@str_Count_SQL,N'@TotalCount?int=0?output',@RecordCount?output??--獲取總的條數(shù)
Declare?@Sql?nvarchar(1000)
set?@Sql?=
'DECLARE??@SortColumn??nvarchar(255)??--建幾個(gè)臨時(shí)變量
DECLARE??@SortNullValue??nvarchar(255)?
DECLARE??@PKStartValue??nvarchar(255)??
SET?@SortNullValue?=?CAST(''''?as?int)
SET?ROWCOUNT??'+??cast(@strStartRow???as??nvarchar(5))??+'???--整數(shù)轉(zhuǎn)為字符
SELECT?@SortColumn=?isNull([函數(shù)中的分類字段]?,@SortNullValue),?@PKStartValue?=?[函數(shù)中的關(guān)鍵字段]????FROM???[F_建立的的函數(shù)]('''+@函數(shù)參數(shù)1+''','''+@函數(shù)參數(shù)2+''')???Where?1=1???'+@StrWhere?+'??ORDER?BY?[函數(shù)中的分類字段],?[再加個(gè)函數(shù)中的關(guān)鍵字段]?Desc?
SET?ROWCOUNT???'+?cast(@PageSize???as??nvarchar(5))?+'????--整數(shù)轉(zhuǎn)為字符
SELECT?*?FROM??F_ManufacturerDiscount('''+@OrgID+''')?
?WHERE??(isNull([函數(shù)中的分類字段],@SortNullValue)>@SortColumn?or?(isNull([函數(shù)中的分類字段],@SortNullValue)=@SortColumn?and?[函數(shù)中的關(guān)鍵字段]<=@PKStartValue))??'+@StrWhere?+'??ORDER?BY?[函數(shù)中的分類字段],[函數(shù)中的關(guān)鍵字段]?Desc
RETURN'
Exec?(@Sql)
GO
轉(zhuǎn)載于:https://www.cnblogs.com/zjy/archive/2008/05/20/1203589.html
總結(jié)
以上是生活随笔為你收集整理的从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习——C++中的四个智能指针
- 下一篇: Microsoft OLE DB Pro