SQL分頁查詢存儲過程代碼分享
更新時(shí)間:2016年12月25日 14:16:56 作者:欣宇
本文主要分享了SQL分頁查詢存儲過程的具體實(shí)例代碼,具有一定的參考價(jià)值,需要的朋友一起來看下吧
話不多說,請看代碼
-------------------------------------
-----作者:張欣宇
-----時(shí)間:2013-06-28
-----簡介:根據(jù)參數(shù)和條件分頁查詢
-------------------------------------
Create proc [dbo].[Up_PagingQueryByParameter]
(
----- 表名或能查詢到結(jié)果的SQL語句{SQL語句左右必須有括號例:(select * from tbl1)}
@TableName varchar(max),
----- 要查詢的列名語句; 可空默認(rèn)*
@ColumnName varchar(5000),
----- 用來排序的列; 不可為空
@OrderByColumnName varchar(50),
----- 排序desc(倒序5.4.3.2.1)或asc(正序1.2.3.4.5); 可空默認(rèn)asc
@ShrtBy varchar(4),
----- Where條件; 可空默認(rèn)1=1
@Where varchar(5000),
----- 每頁顯示數(shù); 可空默認(rèn)20
@PageShows int,
----- 當(dāng)前頁數(shù); 可空默認(rèn)1
@CurrentPage int,
----- 0為分頁查詢;其他為查詢?nèi)? 可空默認(rèn)0
@IsPaging int
)
as
begin
----- 參數(shù)檢查及規(guī)范
if isnull(@Where,N'')=N'' set @Where = N'1=1';
if isnull(@ColumnName,N'')=N'' set @ColumnName = N'*';
if isnull(@PageShows,0)<1 set @PageShows = 20;
if isnull(@CurrentPage,0)<1 set @CurrentPage = 1;
if isnull(@ShrtBy,N'')=N'' set @ShrtBy = 'asc';
if isnull(@IsPaging,0)<>1 set @IsPaging = 0;
----- 定義
-- 拼接的SQL語句
declare @SqlStr nvarchar(max);
declare @SqlWithStr nvarchar(max);
-- 開始條數(shù)
declare @StartIndex int;
-- 結(jié)束條數(shù)
declare @EndIndex int;
----- 賦值
set @StartIndex = (@CurrentPage-1)*@PageShows+1;
print(@CurrentPage);
print(@PageShows);
print(@StartIndex);
set @EndIndex = @CurrentPage*@PageShows;
print(@EndIndex);
set @OrderByColumnName=@OrderByColumnName+' '+@ShrtBy;
----- 分頁查詢
set @SqlWithStr = N'with temp as(select ROW_NUMBER() over(order by '+@OrderByColumnName+N') as RowNumber,'+@ColumnName+N' from '+@TableName+N' as tableName where '+@Where+N')';
if(@IsPaging = 0)
begin
set @SqlStr = @SqlWithStr + N' select '+@ColumnName+N' from temp where temp.RowNumber between '+convert(nvarchar(20),@StartIndex)+N' and '+convert(nvarchar(20),@EndIndex)+N'';
---- print(@SqlStr);
exec(@SqlStr);
----- 總數(shù)查詢
set @SqlStr = @SqlWithStr + N' select count(*) as TotalNumber from temp';
---- print(@SqlStr);
exec(@SqlStr);
end
else
begin
set @SqlStr = @SqlWithStr + N' select '+@ColumnName+N' from temp';
---- print(@SqlStr);
exec(@SqlStr);
end
end
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
您可能感興趣的文章:
相關(guān)文章
MySQL8.0.23版本的root密碼重置最優(yōu)解法
這篇文章主要介紹了MySQL8.0.23版本的root密碼重置最優(yōu)解法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
MySQL中使用group by 是總是出現(xiàn)1055的錯(cuò)誤(推薦)
這篇文章主要介紹了MySQL中使用group by 是總是出現(xiàn)1055的錯(cuò)誤,小編通過查閱相關(guān)資料才把問題解決,今天小編記錄下分享到腳本之家平臺,需要的朋友可以參考下2020-02-02
CentOS 6.5 i386 安裝MySQL 5.7.18詳細(xì)教程
這篇文章主要介紹了CentOS 6.5 i386 安裝MySQL 5.7.18詳細(xì)教程,需要的朋友可以參考下2017-04-04

