好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > 通用分頁(yè)存儲(chǔ)過(guò)程,源碼共享,大家共同完善

通用分頁(yè)存儲(chǔ)過(guò)程,源碼共享,大家共同完善

熱門標(biāo)簽:AI智能云呼電話機(jī)器人怎么注冊(cè) 百度地圖標(biāo)注信息怎么修改 怎么在高德地圖標(biāo)注多個(gè)點(diǎn) 電話機(jī)器人接口是什么樣的 商家地圖標(biāo)注圖片 沈陽(yáng)外呼系統(tǒng)有效果嗎 四川穩(wěn)定外呼系統(tǒng)公司 溫州語(yǔ)音外呼系統(tǒng)排名 福州外呼系統(tǒng)招商
好久沒(méi)有上來(lái)寫點(diǎn)東西了,今天正好有空,共享一些個(gè)人心得,就是關(guān)于分頁(yè)的存儲(chǔ)過(guò)程,這個(gè)問(wèn)題應(yīng)該是老生重談了,網(wǎng)上的通用存儲(chǔ)過(guò)程的類型已經(jīng)夠多了,但是,好象看到的基本上不能夠滿足一些復(fù)雜的SQL語(yǔ)句的分頁(yè)(也可能是我不夠見(jiàn)多識(shí)廣啊,呵呵),比如下面這句: 
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函數(shù),而且沒(méi)有主鍵,有多表連接,有表別名,字段別名等等,這些情況處理起來(lái)可能比較棘手,當(dāng)然,其中的“'' as CheckBox”是我系統(tǒng)當(dāng)中的特例情況,用來(lái)做一些處理的。
    我這里提供一個(gè)自己開(kāi)發(fā)的通用分頁(yè)存儲(chǔ)過(guò)程,有什么好的建議和意見(jiàn),大家請(qǐng)不吝指教。代碼如下:
通用分頁(yè)存儲(chǔ)過(guò)程----Sp_Paging
/**//*
============================================================
功能:    通用分頁(yè)存儲(chǔ)過(guò)程
參數(shù):
    @PK    varchar(50),            主鍵,用來(lái)排序的單一字段,空的話,表示沒(méi)有主鍵,存儲(chǔ)過(guò)程將自動(dòng)創(chuàng)建標(biāo)識(shí)列主鍵
    @Fields    varchar(500),        要顯示的字段列表(格式如:ID,Code,Name)
    @Tables varchar(1000),        要使用的表集合(Org)
    @Where varchar(500),        查詢條件(Code like '100')
    @OrderBy varchar(100),        排序條件(支持多個(gè)排序字段,如:ID,Code desc,Name desc)
    @PageIndex int,                當(dāng)前要顯示的頁(yè)的頁(yè)索引,索引從1開(kāi)始,無(wú)記錄時(shí)為0。
    @PageSize int,                頁(yè)大小
創(chuàng)建者:Hollis Yao
創(chuàng)建日期: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
--替換單引號(hào),避免構(gòu)造SQL出錯(cuò)
set @Fields = replace(@Fields, '''', '''''')

--要執(zhí)行的SQL,切分為幾個(gè)字符串,避免出現(xiàn)長(zhǎng)度超過(guò)4k時(shí)的問(wèn)題
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'    --聲明一個(gè)變量,總記錄數(shù)
set @SQL1 = @SQL1 + ' declare @PageCount int'    --聲明一個(gè)變量,總頁(yè)數(shù)
set @SQL1 = @SQL1 + ' declare @PageIndex int'    --聲明一個(gè)變量,頁(yè)索引
set @SQL1 = @SQL1 + ' declare @StartRow int'    --聲明一個(gè)變量,當(dāng)前頁(yè)第一條記錄的索引

set @SQL1 = @SQL1 + ' select @TotalCount=count(*) from ' + @Tables + @Where    --獲取總記錄數(shù)
set @SQL1 = @SQL1 + ' if @PageCount = 0 begin'    --如果記錄數(shù)為0,直接輸出空的結(jié)果集
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)    --獲取總頁(yè)數(shù)
set @SQL1 = @SQL1 + ' set @PageIndex=' + convert(varchar, @PageIndex)    --設(shè)置正確的頁(yè)索引
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
    --****************************************************************************
    --****************不需要?jiǎng)?chuàng)建主鍵********************************************
    --****************************************************************************
    declare @SortDirection varchar(10)    --排序方向,>=:升序,=:倒序
    set @SortDirection = '>='
    if charindex('desc', @OrderBy) > 0
        set @SortDirection = '='
    set @SQL2 = @SQL2 + ' declare @Sort varchar(100)'    --聲明一個(gè)變量,用來(lái)記錄當(dāng)前頁(yè)第一條記錄的排序字段值
    set @SQL2 = @SQL2 + ' set rowcount @StartRow'    --設(shè)置返回記錄數(shù)截止到當(dāng)前頁(yè)的第一條
    set @SQL2 = @SQL2 + ' select @Sort=' + @PK + ' from ' + @Tables + @Where + ' order by ' + @OrderBy    --獲取當(dāng)前頁(yè)第一個(gè)排序字段值
    set @SQL2 = @SQL2 + ' set rowcount ' + convert(varchar, @PageSize)    --設(shè)置返回記錄數(shù)為頁(yè)大小
    set @Where = @Where + ' and ' + @PK + @SortDirection + '@Sort'
    set @SQL2 = @SQL2 + ' select ' + @Fields + ' from ' + @Tables + @Where + ' order by ' + @OrderBy    --輸出最終顯示結(jié)果
end
else
begin
    --****************************************************************************
    --*************需要?jiǎng)?chuàng)建自增長(zhǎng)主鍵******************************************
    --****************************************************************************
    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'    --聲明一個(gè)變量,開(kāi)始索引
    set @SQL2 = @SQL2 + ' declare @PKEnd int'    --聲明一個(gè)變量,結(jié)束索引
    set @SQL2 = @SQL2 + ' set @PKBegin=@StartRow'
    set @SQL2 = @SQL2 + ' set @PKEnd=@EndRow'
    --****************************************************************************
    --************對(duì)特殊字段進(jìn)行轉(zhuǎn)換,以便可以插入到臨時(shí)表******************
    --****************************************************************************
    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)=','    --去除最左邊的逗號(hào)
        set @TempFields = substring(@TempFields, 2, len(@TempFields))
    if right(@TempFields,1)=','    --去除最右邊的逗號(hào)
        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
    --****************************************************************************
    --********去除字段的表名前綴,當(dāng)有字段有別名時(shí),只保留字段別名*********
    --****************************************************************************
    declare @TotalFields varchar(500)
    declare @tmp varchar(50)
    declare @i int
    declare @j int
    declare @iLeft int --左括號(hào)的個(gè)數(shù)
    declare @iRight int --右括號(hào)的個(gè)數(shù)
    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
            --找不到逗號(hào)分割,即表示只剩下最后一個(gè)字段
            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))
        --*******當(dāng)有字段有別名時(shí),只保留字段別名*********

        --帶括號(hào)的情況要單獨(dú)處理,如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

        --當(dāng)括號(hào)恰好組隊(duì)的時(shí)候,才能進(jìn)行字段別名的處理
        if (@iLeft = @iRight)
        begin
            set @iLeft = 0
            set @iRight = 0
            --不對(duì)這幾個(gè)特殊字段作處理: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'    --輸出最終顯示結(jié)果
    set @SQL2 = @SQL2 + ' drop table #tb'
end

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

--print @SQL1 + @SQL2
exec(@SQL1 + @SQL2)
如果使用這個(gè)通用分頁(yè)存儲(chǔ)過(guò)程的話,那么調(diào)用方法如下:
使用通用分頁(yè)存儲(chǔ)過(guò)程進(jìn)行分頁(yè)
/**//*
============================================================
功能:    獲取銷售目標(biāo),根據(jù)條件
參數(shù):
    @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,                當(dāng)前要顯示的頁(yè)的頁(yè)索引,索引從1開(kāi)始,無(wú)記錄時(shí)為0。
    @PageSize int,                頁(yè)大小
創(chuàng)建者:Hollis Yao
創(chuàng)建日期: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

標(biāo)簽:無(wú)錫 西寧 營(yíng)口 來(lái)賓 七臺(tái)河 寶雞 邯鄲 汕尾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《通用分頁(yè)存儲(chǔ)過(guò)程,源碼共享,大家共同完善》,本文關(guān)鍵詞  通用,分頁(yè),存儲(chǔ),過(guò)程,源碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《通用分頁(yè)存儲(chǔ)過(guò)程,源碼共享,大家共同完善》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于通用分頁(yè)存儲(chǔ)過(guò)程,源碼共享,大家共同完善的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 婬乱妓院NP嗯啊粗大H漫画| 欧美欧美伦院在线观看| 琪琪免费影院| 嗯啊轻点| 亚瑟成人影院视频在线观看| 99精品国产AⅤv8在线观看| 人人爽久久涩噜噜噜网站| 精品无码少妇一区二区三区免费 | s货你是不是欠c了公交车做| 高h欧美| 亚洲一区二区在线视频| 午夜拍拍福利视频蜜桃视频| 成人免费视频在| 甜性涩爱韩国 无删减| 伊春市| 韩国一级毛片a级免观看| 美女张开腿给男人桶爽免费软件| 啊灬啊别停灬用力啊| 日韩AV在线一区免费| 美女的隐私视频黄ww| 双腿挂他肩上撞击轻哼h| 情侣视频精品免费的国产| 粗大的内捧猛烈进出的视频| 再深点灬舒服灬受不了了APP冫| free日本viodeo| h版泰山1995未删减版在线观看| 我想看黄色录像| 求求你不要she在里面| 一级毛片女人刺激视频| 国产成人精品免费视频下载| 美妇人妻蜜唇都湿淋淋的| 91丨PORNY丨老熟女| 美女a毛片| 国产又色又爽又黄的网站免费| 护士扒下内裤让我爽一夜| 脱裤子自慰丝袜AV久久影视| 中文字幕350页| 女生让男生插| 欧美成人免费xxx大片| 成人免费看AA片jPg| 操美女大逼|