項目中用到的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/‘‘