SQL Server2000分頁預存程序
- Create PROCEDURE [dbo].[GetRecordWithPage]
- @fieldsType nvarchar(1000), --欄位列表(帶類型),用於@t表變數的欄位聲明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50)
- @fieldsList nvarchar(500), --欄位列表(不帶類型),用於分頁部分讀取@t表變數的欄位,也可使用*代替,但效能會下降,如:PhotoID ,UserID ,PhotoTitle
- @selectSrting nvarchar(2000), --向@t表變數中讀取記錄的Select語句
- @resultOrderBy nvarchar(200), --對分頁結果進行排序的欄位,如:升序'PhotoID ASC'、降序'PhotoID DESC',注意:如果是降序的話要在selectSrting和此處都加DESC
- @pageSize INT, --頁尺寸,0表示返回所有行
- @currentPage INT, --當前頁,首頁為1
- @RecordCount INT OUTPUT --非0值則返回記錄總數
- AS
- BEGIN
- DECLARE @strSql varchar(4000)
- declare @sql nvarchar(1000)
- SET @strSql = 'DECLARE @t TABLE(' +@fieldsType+ ');'
- SET @strSql = @strSql + 'INSERT INTO @t '+@selectSrting+ ';'
- set @sql = @strSql + 'select @aa=count(*) from @t;'
- exec sp_executesql @sql,N'@aa int output',@RecordCount OUTPUT;
- IF @pageSize=0
- SET @strSql=@strSql+'SELECT '+@fieldsList+' FROM @t;'
- ELSE
- IF @currentPage=1
- SET @strSql=@strSql+'select TOP('+STR(@pageSize)+')'+@fieldsList+' FROM @t;'
- ELSE
- BEGIN
- SET @strSql =@strSql+'SELECT TOP('+Str(@pageSize)+')'+ @fieldsList+'FROM (SELECT TOP('+Str(@pageSize * @currentPage)+')'+@fieldsList+' , ROW_NUMBER() OVER (ORDER BY '+@resultOrderBy+')'
- SET @strSql =@strSql+' AS RowNumber FROM @t'
- SET @strSql =@strSql+') AS r WHERE r.RowNumber >' + Str(@pageSize * (@currentPage - 1))+';'
- END
- EXEC(@strSql)
- END
==================================================================