天天看點

SQLServer分頁查詢存儲過程

項目中用到的SQLServer分頁查詢存儲過程。

【存儲過程】

create PROCEDURE prcPageResult

-- 獲得某一頁的資料 --

@currPage int = 1,                         --目前頁頁碼 (即Top currPage)

@showColumn varchar(2000) = ‘*‘,           --需要得到的字段 (即 column1,column2,......)

@strCondition varchar(2000) = ‘‘,          --查詢條件 (即 where condition......) 不用加where關鍵字

@ascColumn varchar(100) = ‘‘,              --排序的字段名 (即 order by column asc/desc)

@bitOrderType bit = 0,                     --排序的類型 (0為升序,1為降序)

@pkColumn varchar(50) = ‘‘,                --主鍵名稱

@pageSize int = 20,                        --分頁大小

@RecordCount int output --傳回總行數

AS

BEGIN -- 存儲過程開始

-- 該存儲過程需要用到的幾個變量 --

DECLARE @strTemp varchar(1000)

DECLARE @strSql varchar(4000)                   --該存儲過程最後執行的語句

DECLARE @strSql01 varchar(4000) 

DECLARE @strOrderType varchar(1000)      --排序類型語句 (order by column asc或者order by column desc)

BEGIN

IF @bitOrderType = 1   -- bitOrderType=1即執行降序

    SET @strOrderType = ‘ ORDER BY ‘+@ascColumn+‘ DESC‘

    SET @strTemp = ‘<(SELECT min‘

END

ELSE

    SET @strOrderType = ‘ ORDER BY ‘+@ascColumn+‘ ASC‘

    SET @strTemp = ‘>(SELECT max‘

IF @currPage = 1    -- 如果是第一頁

    IF @strCondition != ‘‘

        SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+‘ ‘+@showColumn+‘ FROM dbo.DemoData ‘+

            ‘ WHERE ‘+@strCondition+@strOrderType

    ELSE

        SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+‘ ‘+@showColumn+‘ FROM dbo.DemoData ‘+@strOrderType

ELSE    -- 其他頁

    IF @strCondition !=‘‘

        ‘ WHERE ‘+@strCondition+‘ AND ‘+@pkColumn+@strTemp+‘(‘+@pkColumn+‘)‘+‘ FROM (SELECT TOP ‘+STR((@currPage-1)*@pageSize)+

        ‘ ‘+@pkColumn+‘ FROM dbo.DemoData ‘+@strOrderType+‘) AS TabTemp)‘+@strOrderType

        ‘ WHERE ‘+@pkColumn+@strTemp+‘(‘+@pkColumn+‘)‘+‘ FROM (SELECT TOP ‘+STR((@currPage-1)*@pageSize)+‘ ‘+@pkColumn+

        ‘ FROM dbo.DemoData ‘+@strOrderType+‘) AS TabTemp)‘+@strOrderType

select @RecordCount=COUNT(*) from dbo.DemoData

EXEC (@strSql)

END  -- 存儲過程結束

------------------------------------------------

GO

【調用方式】

DECLARE @RecordCount int

exec prcPageResult 1,‘*‘,‘‘,‘id‘,1,‘id‘,10,@RecordCount out

SELECT @RecordCount

---

exec prcPageResult 1,‘*‘,‘name=‘‘hugh‘‘‘,‘id‘,0,‘id‘,10,@RecordCount out

--存儲過程中轉義字元為‘,是以name=’hugh‘正确的寫法應該是‘name=‘‘hugh‘‘‘而不是‘name=/‘hugh/‘‘

繼續閱讀