亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 通用分頁存儲過程,源碼共享,大家共同完善

通用分頁存儲過程,源碼共享,大家共同完善

熱門標簽:AI智能云呼電話機器人怎么注冊 百度地圖標注信息怎么修改 怎么在高德地圖標注多個點 電話機器人接口是什么樣的 商家地圖標注圖片 沈陽外呼系統有效果嗎 四川穩定外呼系統公司 溫州語音外呼系統排名 福州外呼系統招商
好久沒有上來寫點東西了,今天正好有空,共享一些個人心得,就是關于分頁的存儲過程,這個問題應該是老生重談了,網上的通用存儲過程的類型已經夠多了,但是,好象看到的基本上不能夠滿足一些復雜的SQL語句的分頁(也可能是我不夠見多識廣啊,呵呵),比如下面這句: 
select '' as CheckBox, A.TargetID, A.TargetPeriod, Convert(varchar(10), B.BeginDate, 120) as BeginDate, 
    Convert(varchar(10), B.EndDate, 120) as EndDate, C.SalesCode, C.SalesName, D.CatalogCode, D.CatalogName, 
    E.OrgID, E.OrgName, F.OrgID as BranchOrgID, F.OrgCode as BranchOrgCode, F.OrgName as BranchOrgName, 
    A.Amount, '' as DetailButton
from ChlSalesTarget as A
    left outer join ChlSalesTargetPeriod as B on A.TargetPeriod=B.TargetPeriod
    left outer join ChlSales as C on A.Sales=C.SalesCode
    left outer join ChlItemCatalog as D on A.ItemCatalog=D.CatalogCode
    left outer join ChlOrg as E on A.OrgID=E.OrgID
    left outer join ChlOrg as F on C.BranchOrgID=F.OrgID
where A.TargetPeriod >='200607' and A.TargetPeriod ='200608' and F.OrgCode like '%123%' and E.OrgCode like '%123%'
order by A.TargetPeriod desc,C.SalesName,D.CatalogName上面這句SQL里面有一些特殊情況,比如使用了Convert函數,而且沒有主鍵,有多表連接,有表別名,字段別名等等,這些情況處理起來可能比較棘手,當然,其中的“'' as CheckBox”是我系統當中的特例情況,用來做一些處理的。
    我這里提供一個自己開發的通用分頁存儲過程,有什么好的建議和意見,大家請不吝指教。代碼如下:
通用分頁存儲過程----Sp_Paging
/**//*
============================================================
功能:    通用分頁存儲過程
參數:
    @PK    varchar(50),            主鍵,用來排序的單一字段,空的話,表示沒有主鍵,存儲過程將自動創建標識列主鍵
    @Fields    varchar(500),        要顯示的字段列表(格式如:ID,Code,Name)
    @Tables varchar(1000),        要使用的表集合(Org)
    @Where varchar(500),        查詢條件(Code like '100')
    @OrderBy varchar(100),        排序條件(支持多個排序字段,如:ID,Code desc,Name desc)
    @PageIndex int,                當前要顯示的頁的頁索引,索引從1開始,無記錄時為0。
    @PageSize int,                頁大小
創建者:Hollis Yao
創建日期:2006-08-06
備注:
============================================================
*/
Create PROCEDURE [dbo].[Sp_Paging]
    @PK    varchar(50)='',
    @Fields    varchar(500),
    @Tables varchar(1000),
    @Where varchar(500)='',
    @OrderBy varchar(100),
    @PageIndex int,
    @PageSize int
AS
--替換單引號,避免構造SQL出錯
set @Fields = replace(@Fields, '''', '''''')

--要執行的SQL,切分為幾個字符串,避免出現長度超過4k時的問題
declare @SQL1 varchar(4000)
declare @SQL2 varchar(4000)

set @SQL1 = ''
set @SQL2 = ''
if @Where is not null and len(ltrim(rtrim(@Where))) > 0
    set @Where = ' where ' + @Where
else
    set @Where = ' where 1=1'

set @SQL1 = @SQL1 + ' declare @TotalCount int'    --聲明一個變量,總記錄數
set @SQL1 = @SQL1 + ' declare @PageCount int'    --聲明一個變量,總頁數
set @SQL1 = @SQL1 + ' declare @PageIndex int'    --聲明一個變量,頁索引
set @SQL1 = @SQL1 + ' declare @StartRow int'    --聲明一個變量,當前頁第一條記錄的索引

set @SQL1 = @SQL1 + ' select @TotalCount=count(*) from ' + @Tables + @Where    --獲取總記錄數
set @SQL1 = @SQL1 + ' if @PageCount = 0 begin'    --如果記錄數為0,直接輸出空的結果集
set @SQL1 = @SQL1 + ' select ' + @Fields + ' from ' + @Tables + ' where 1>1'
set @SQL1 = @SQL1 + ' select 0 as PageIndex,0 as PageCount,' + convert(varchar, @PageSize) + ' as PageSize,0 as TotalCount'
set @SQL1 = @SQL1 + ' return end'

set @SQL1 = @SQL1 + ' set @PageCount=(@TotalCount+' + convert(varchar, @PageSize) + '-1)/' + convert(varchar, @PageSize)    --獲取總頁數
set @SQL1 = @SQL1 + ' set @PageIndex=' + convert(varchar, @PageIndex)    --設置正確的頁索引
set @SQL1 = @SQL1 + ' if @PageIndex0 set @PageIndex=1'
set @SQL1 = @SQL1 + ' if @PageIndex>@PageCount and @PageCount>0 set @PageIndex=@PageCount'
set @SQL1 = @SQL1 + ' set @StartRow=(@PageIndex-1)*' + convert(varchar, @PageSize) + '+1'

if (charindex(',', @OrderBy)=0 and charindex(@PK, @OrderBy)>0)
begin
    --****************************************************************************
    --****************不需要創建主鍵********************************************
    --****************************************************************************
    declare @SortDirection varchar(10)    --排序方向,>=:升序,=:倒序
    set @SortDirection = '>='
    if charindex('desc', @OrderBy) > 0
        set @SortDirection = '='
    set @SQL2 = @SQL2 + ' declare @Sort varchar(100)'    --聲明一個變量,用來記錄當前頁第一條記錄的排序字段值
    set @SQL2 = @SQL2 + ' set rowcount @StartRow'    --設置返回記錄數截止到當前頁的第一條
    set @SQL2 = @SQL2 + ' select @Sort=' + @PK + ' from ' + @Tables + @Where + ' order by ' + @OrderBy    --獲取當前頁第一個排序字段值
    set @SQL2 = @SQL2 + ' set rowcount ' + convert(varchar, @PageSize)    --設置返回記錄數為頁大小
    set @Where = @Where + ' and ' + @PK + @SortDirection + '@Sort'
    set @SQL2 = @SQL2 + ' select ' + @Fields + ' from ' + @Tables + @Where + ' order by ' + @OrderBy    --輸出最終顯示結果
end
else
begin
    --****************************************************************************
    --*************需要創建自增長主鍵******************************************
    --****************************************************************************
    set @SQL2 = @SQL2 + ' declare @EndRow int'
    set @SQL2 = @SQL2 + ' set @EndRow=@PageIndex*' + convert(varchar, @PageSize)
    set @SQL2 = @SQL2 + ' set rowcount @EndRow'
    set @SQL2 = @SQL2 + ' declare @PKBegin int'    --聲明一個變量,開始索引
    set @SQL2 = @SQL2 + ' declare @PKEnd int'    --聲明一個變量,結束索引
    set @SQL2 = @SQL2 + ' set @PKBegin=@StartRow'
    set @SQL2 = @SQL2 + ' set @PKEnd=@EndRow'
    --****************************************************************************
    --************對特殊字段進行轉換,以便可以插入到臨時表******************
    --****************************************************************************
    declare @TempFields varchar(500)
    set @TempFields=@Fields
    set @TempFields = replace(@TempFields, ''''' as CheckBox', '')
    set @TempFields = replace(@TempFields, ''''' as DetailButton', '')
    set @TempFields = replace(@TempFields, ''''' as Radio', '')
    set @TempFields = LTRIM(RTRIM(@TempFields))
    if left(@TempFields,1)=','    --去除最左邊的逗號
        set @TempFields = substring(@TempFields, 2, len(@TempFields))
    if right(@TempFields,1)=','    --去除最右邊的逗號
        set @TempFields = substring(@TempFields, 1, len(@TempFields)-1)

    set @SQL2 = @SQL2 + ' select identity(int,1,1) as PK,' + @TempFields + ' into #tb from ' + @Tables + @Where + ' order by ' + @OrderBy
    --****************************************************************************
    --********去除字段的表名前綴,當有字段有別名時,只保留字段別名*********
    --****************************************************************************
    declare @TotalFields varchar(500)
    declare @tmp varchar(50)
    declare @i int
    declare @j int
    declare @iLeft int --左括號的個數
    declare @iRight int --右括號的個數
    set @i = 0
    set @j = 0
    set @iLeft = 0
    set @iRight = 0
    set @tmp = ''
    set @TotalFields = ''

    while (len(@Fields)>0)
    begin
        set @i = charindex(',', @Fields)

        --去除字段的表名前綴
        if (@i=0)
        begin
            --找不到逗號分割,即表示只剩下最后一個字段
            set @tmp = @Fields
        end
        else
        begin
            set @tmp = substring(@Fields, 1, @i)
        end
        set @j = charindex('.', @tmp)
        if (@j>0)
            set @tmp = substring(@tmp, @j+1, len(@tmp))
        --*******當有字段有別名時,只保留字段別名*********

        --帶括號的情況要單獨處理,如Convert(varchar(10), B.EndDate, 120) as EndDate
        while (charindex('(', @tmp) > 0)
        begin
            set @iLeft = @iLeft + 1
            set @tmp = substring(@tmp, charindex('(', @tmp)+1, Len(@tmp))
        end
        while (charindex(')', @tmp) > 0)
        begin
            set @iRight = @iRight + 1
            set @tmp = substring(@tmp, charindex(')', @tmp)+1, Len(@tmp))
        end

        --當括號恰好組隊的時候,才能進行字段別名的處理
        if (@iLeft = @iRight)
        begin
            set @iLeft = 0
            set @iRight = 0
            --不對這幾個特殊字段作處理:CheckBox、DetailButton、Radio
            if (charindex('CheckBox', @tmp) = 0 and charindex('DetailButton', @tmp) = 0 and charindex('Radio', @tmp) = 0)
            begin
                --判斷是否有別名
                if (charindex('as', @tmp) > 0)--別名的第一種寫法,帶'as'的格式
                begin
                    set @tmp = substring(@tmp, charindex('as', @tmp)+2, len(@tmp))
                end
                else
                begin
                    if (charindex(' ', @tmp) > 0)--別名的第二種寫法,帶空格(" ")的格式
                    begin
                        while(charindex(' ', @tmp) > 0)
                        begin
                            set @tmp = substring(@tmp, charindex(' ', @tmp)+1, len(@tmp))
                        end
                    end
                end
            end
            set @TotalFields = @TotalFields + @tmp
        end
        if (@i=0)
            set @Fields = ''
        else
            set @Fields = substring(@Fields, @i+1, len(@Fields))

    end
    --print @TotalFields

    set @SQL2 = @SQL2 + ' select ' + @TotalFields + ' from #tb where PK between @PKBegin and @PKEnd order by PK'    --輸出最終顯示結果
    set @SQL2 = @SQL2 + ' drop table #tb'
end

--輸出“PageIndex(頁索引)、PageCount(頁數)、PageSize(頁大小)、TotalCount(總記錄數)”
set @SQL2 = @SQL2 + ' select @PageIndex as PageIndex,@PageCount as PageCount,' 
                + convert(varchar, @PageSize) + ' as PageSize,@TotalCount as TotalCount'

--print @SQL1 + @SQL2
exec(@SQL1 + @SQL2)
如果使用這個通用分頁存儲過程的話,那么調用方法如下:
使用通用分頁存儲過程進行分頁
/**//*
============================================================
功能:    獲取銷售目標,根據條件
參數:
    @UserType int,
    @OrgID varchar(500),
    @TargetPeriodBegin nvarchar(50),
    @TargetPeriodEnd nvarchar(50),
    @BranchOrgCode nvarchar(50),
    @BranchOrgName nvarchar(50),
    @OrgCode nvarchar(50),
    @OrgName nvarchar(50),
    @SalesCode nvarchar(50),
    @SalesName nvarchar(50),
    @CatalogCode nvarchar(50),
    @CatalogName nvarchar(50),
    @PageIndex int,                當前要顯示的頁的頁索引,索引從1開始,無記錄時為0。
    @PageSize int,                頁大小
創建者:Hollis Yao
創建日期:2006-08-11
備注:
============================================================
*/
Create PROCEDURE [dbo].[GetSalesTargetList] 
@UserType int,
@OrgID nvarchar(500),
@TargetPeriodBegin nvarchar(50),
@TargetPeriodEnd nvarchar(50),
@BranchOrgCode nvarchar(50),
@BranchOrgName nvarchar(50),
@OrgCode nvarchar(50),
@OrgName nvarchar(50),
@SalesCode nvarchar(50),
@SalesName nvarchar(50),
@CatalogCode nvarchar(50),
@CatalogName nvarchar(50),
@PageIndex int,
@PageSize int
AS
declare @Condition nvarchar(2000)
set @Condition = ''
if (@UserType>1)
    set @Condition = @Condition + ' and A.OrgID in (' + @OrgID + ')'
if (len(@TargetPeriodBegin)>0)
    set @Condition = @Condition + ' and A.TargetPeriod >=''' + @TargetPeriodBegin + ''''
if (len(@TargetPeriodEnd)>0)
    set @Condition = @Condition + ' and A.TargetPeriod =''' + @TargetPeriodEnd + ''''
if (len(@BranchOrgCode)>0)
    set @Condition = @Condition + ' and F.OrgCode like ''%' + @BranchOrgCode + '%'''
if (len(@BranchOrgName)>0)
    set @Condition = @Condition + ' and F.OrgName like ''%' + @BranchOrgName + '%'''
if (len(@OrgCode)>0)
    set @Condition = @Condition + ' and E.OrgCode like ''%' + @OrgCode + '%'''
if (len(@OrgName)>0)
    set @Condition = @Condition + ' and E.OrgName like ''%' + @OrgName + '%'''
if (len(@SalesCode)>0)
    set @Condition = @Condition + ' and C.SalesCode like ''%' + @SalesCode + '%'''
if (len(@SalesName)>0)
    set @Condition = @Condition + ' and C.SalesName like ''%' + @SalesName + '%'''
if (len(@CatalogCode)>0)
    set @Condition = @Condition + ' and D.CatalogCode like ''%' + @CatalogCode + '%'''
if (len(@CatalogName)>0)
    set @Condition = @Condition + ' and D.CatalogName like ''%' + @CatalogName + '%'''
if (len(@Condition)>0)
    set @Condition = substring(@Condition,5,len(@Condition))
--print @Condition
exec sp_Paging
    N'',N''' as CheckBox, A.TargetID, A.TargetPeriod, Convert(varchar(10), B.BeginDate, 120) as BeginDate, Convert(varchar(10), B.EndDate, 120) as EndDate,
        C.SalesCode, C.SalesName, D.CatalogCode, D.CatalogName, E.OrgID, E.OrgName, F.OrgID as BranchOrgID, F.OrgCode as BranchOrgCode, F.OrgName as BranchOrgName, A.Amount, '' as DetailButton',
    N'ChlSalesTarget as A
    left outer join ChlSalesTargetPeriod as B on A.TargetPeriod=B.TargetPeriod
    left outer join ChlSales as C on A.Sales=C.SalesCode
    left outer join ChlItemCatalog as D on A.ItemCatalog=D.CatalogCode
    left outer join ChlOrg as E on A.OrgID=E.OrgID
    left outer join ChlOrg as F on C.BranchOrgID=F.OrgID',
    @Condition,
    N'A.TargetPeriod desc,C.SalesName,D.CatalogName',
    @PageIndex, @PageSize

標簽:無錫 西寧 營口 來賓 七臺河 寶雞 邯鄲 汕尾

巨人網絡通訊聲明:本文標題《通用分頁存儲過程,源碼共享,大家共同完善》,本文關鍵詞  通用,分頁,存儲,過程,源碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《通用分頁存儲過程,源碼共享,大家共同完善》相關的同類信息!
  • 本頁收集關于通用分頁存儲過程,源碼共享,大家共同完善的相關信息資訊供網民參考!
  • 推薦文章
    国产精品123| 国产一区二区精品久久91| 一级片片| 久久99爰这里有精品国产| 午夜欧美成人久久久久久| 日韩字幕在线| 日本伦理黄色大片在线观看网站| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩在线观看视频黄| 亚洲 欧美 成人日韩| 一级女性全黄久久生活片| 九九热国产视频| 黄视频网站免费看| 国产高清在线精品一区二区| 精品在线观看国产| 欧美大片一区| 亚欧视频在线| 日本特黄特色aaa大片免费| 日本特黄特黄aaaaa大片 | 日韩免费在线视频| 国产伦精品一区二区三区无广告 | 日韩免费在线视频| 亚飞与亚基在线观看| 欧美日本免费| 国产一区二区精品久久91| 精品国产香蕉在线播出| 久久国产一久久高清| 久久精品店| 亚欧成人乱码一区二区| 日本免费乱理伦片在线观看2018| 一级片免费在线观看视频| 欧美a免费| 国产极品精频在线观看| 久久99中文字幕久久| 国产亚洲免费观看| 香蕉视频一级| 久久成人性色生活片| 精品视频免费看| 日韩在线观看网站| 国产伦久视频免费观看视频| 黄视频网站免费观看| 国产一级生活片| 精品久久久久久中文字幕一区| 精品国产香蕉在线播出| 欧美激情在线精品video| 欧美a级v片不卡在线观看| 成人av在线播放| 日韩一级黄色片| 99色播| 高清一级片| 久久国产精品自由自在| 久久精品免视看国产明星| 99色视频在线| 欧美国产日韩久久久| 精品国产一区二区三区久久久狼| 国产麻豆精品高清在线播放| 一级女性大黄生活片免费| 精品国产香蕉在线播出| 国产一区精品| 亚欧乱色一区二区三区| 国产a视频精品免费观看| 91麻豆精品国产综合久久久| 精品视频在线观看免费| 欧美日本免费| 亚飞与亚基在线观看| 成人在免费观看视频国产| 久久国产精品自由自在| 99热视热频这里只有精品| 国产伦理精品| 欧美激情一区二区三区视频| 精品视频在线看| 一级片片| 九九干| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产亚洲精品成人a在线| 九九精品在线| 91麻豆精品国产自产在线观看一区| 国产一区二区高清视频| 国产a毛片| 天天做日日爱| 亚欧视频在线| 九九热国产视频| 四虎影视久久| 免费的黄视频| 国产一区二区精品久| 亚洲精品永久一区| 韩国毛片免费大片| 久久久久久久免费视频| 亚欧成人乱码一区二区| 99色视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 四虎影视库| 欧美一区二区三区性| 亚洲女人国产香蕉久久精品| 久久国产精品永久免费网站| 四虎影视久久| 日韩字幕在线| 四虎影视久久久| 免费国产在线观看不卡| 国产网站在线| 日韩中文字幕一区二区不卡| 国产不卡在线观看| 久草免费在线观看| 一级女性全黄生活片免费| 国产一区免费在线观看| 亚洲精品久久玖玖玖玖| 成人免费福利片在线观看| 91麻豆tv| 国产视频一区在线| 精品国产一区二区三区久| 欧美激情伊人| 精品视频在线观看免费| 九九精品久久久久久久久| 欧美激情一区二区三区在线播放 | 欧美a级片免费看| 欧美一区二区三区在线观看| 成人免费福利片在线观看| 九九精品久久久久久久久| 一级片免费在线观看视频| 国产伦精品一区二区三区无广告 | 精品在线免费播放| 夜夜操网| 成人免费观看网欧美片| 99久久精品国产国产毛片| 四虎久久影院| 999久久狠狠免费精品| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲 男人 天堂| 台湾毛片| 黄视频网站免费| 韩国三级视频网站| 国产网站在线| 麻豆系列 在线视频| 欧美国产日韩在线| 国产精品自拍在线观看| 国产一级强片在线观看| 国产不卡精品一区二区三区| 国产成人精品影视| 午夜久久网| 成人影视在线观看| 国产高清视频免费观看| 日韩免费在线视频| 精品视频在线看 | 一级毛片视频免费| 精品视频在线观看免费| 日本在线播放一区| 国产一区二区精品久久| 国产不卡在线观看| 一a一级片| 久草免费在线观看| 亚洲 国产精品 日韩| 国产视频一区在线| 欧美国产日韩精品| 午夜欧美成人香蕉剧场| 九九九国产| 国产a毛片| 美女被草网站| 国产精品123| 91麻豆精品国产高清在线| 一级女性全黄生活片免费| 久久久成人网| 日韩av成人| 韩国三级一区| 国产不卡福利| 日韩一级黄色| 高清一级毛片一本到免费观看| 国产伦精品一区二区三区无广告| 成人免费观看网欧美片| 日本免费乱理伦片在线观看2018| 久久久久久久久综合影视网| 精品视频在线观看一区二区| 国产视频网站在线观看| 亚洲第一视频在线播放| 国产国产人免费视频成69堂| 精品国产亚洲一区二区三区| 毛片高清| 99久久精品国产免费| 免费国产在线观看| 精品久久久久久中文| 可以免费看污视频的网站| 黄色福利片| 精品国产亚洲人成在线| 香蕉视频久久| 国产91精品一区| 欧美激情一区二区三区在线播放| 久久久久久久男人的天堂| 91麻豆精品国产片在线观看| 国产一级强片在线观看| 国产伦精品一区三区视频| 国产精品自拍在线观看| 午夜在线影院| 亚洲女人国产香蕉久久精品| 成人高清视频在线观看| 四虎影视久久久| 欧美电影免费| 久久国产精品自线拍免费| 日本伦理网站| 香蕉视频亚洲一级| 色综合久久天天综合观看| a级黄色毛片免费播放视频|